Avatar billede mungojerrie Nybegynder
09. august 2005 - 11:33 Der er 4 kommentarer og
1 løsning

JApplet - skift indhold i contentpane

Hej

Jeg vil gerne have min applet til at kunne skifte udseende/indhold, således at min bruger først for en login billed at se og hvis han/hun logger korrekt ind, skal brugeren se min jtable. Jeg har dog lidt problemer med at få lavet skift af visningen....

Min kode kommer her:

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;

import dk.elopak.client.util.FormPanel;
import dk.elopak.server.Server;
import dk.elopak.server.data.ConverterServerDataView;
import dk.elopak.server.data.DefaultServerDataView;
import dk.elopak.server.data.FlameSealerServerDataView;

public class GUI extends JApplet {
   
    private FormPanel formPanel;
    private JPanel loginContainer;
    private JSplitPane dataContainer;
    private static DataTable dataTable = null;
    private static boolean isLoggedIn = false;
    public static JButton moveRowsBtn;
    private static final int COLUMNS_TEXTFIELD = 15;
    private JTextField txtUserName = new JTextField(COLUMNS_TEXTFIELD);
    private JPasswordField txtPassword = new JPasswordField(COLUMNS_TEXTFIELD);
    private JButton btnLogin = new JButton("Login");
    private boolean isLoginScreenVisible = true;
    private static DefaultServerDataView dsdv;


    public void paint(Graphics g) {super.paint(g);}
   
    public void start() {super.start();}
   
    public void stop() {super.stop();}
   
    public void destroy() {super.destroy();}
   
    public void init() {
        try {
            super.init();
            javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    loginContainer = new JPanel(new BorderLayout());
                    dataContainer = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
                    txtUserName.setText("Jan");
                    txtPassword.setText("bugaboo");
                    createAndShowGUI();
                }
            });
        } catch (Exception e) {
            System.err.println("createGUI didn't successfully complete");
            e.printStackTrace();
        }
    }

    private ActionListener btnLoginActionListener = new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(!txtUserName.getText().equals("")){
                if (txtPassword.getPassword().length!=0){
                    boolean valid = Server.validateLogin(txtUserName.getText(), txtPassword.getPassword());
                    if(valid)switchView();
                }else{
                    displayError("You have to provide a password");
                    txtPassword.requestFocus();
                }
            }else{
                displayError("You have to provide a username");
                txtUserName.requestFocus();
            }
        }
    };

    public void createLoginView(){
        formPanel = new FormPanel();
        btnLogin.addActionListener(btnLoginActionListener);
        formPanel.addFrame("Login");
        formPanel.addComponents(txtUserName, "UserName");
        formPanel.addComponents(txtPassword, "Password");
        formPanel.addComponents(btnLogin);
        formPanel.closeFrame();
        formPanel.fillSpace();
        loginContainer.add(formPanel);
        loginContainer.setVisible(true);
    }

    public void createDataView(boolean isConverter){
        if(isConverter){
            ConverterServerDataView csdv = new ConverterServerDataView();
            setDataView(csdv);
            dataTable = new DataTable(csdv);           
        }else{
            FlameSealerServerDataView fssdv = new FlameSealerServerDataView();
            setDataView(fssdv);
            dataTable = new DataTable(fssdv);
        }
       
        JScrollPane scrollPane = new JScrollPane(dataTable);
        JPanel topPanel = new JPanel();
        String[] machineList = ((DefaultServerDataView)dataTable.getModel()).getMachineList();
        JComboBox machines = new JComboBox(machineList);
        JLabel lastUpdated = new JLabel();
        java.sql.Timestamp d = new java.sql.Timestamp(System.currentTimeMillis());
        lastUpdated.setText("Last updated : " + Server.getDateFormat().format(d));
        moveRowsBtn = new JButton("Move");
        moveRowsBtn.addActionListener(btnMoveActionListener);
        topPanel.add(machines);
        topPanel.add(lastUpdated);
        topPanel.add(moveRowsBtn);
        JPanel bottomPanel = new JPanel();   
        scrollPane.setViewportView(dataTable);
        bottomPanel.add(scrollPane);
        dataContainer.setDividerLocation(110);
        dataContainer.setEnabled(false);
        dataContainer.setLeftComponent(topPanel);
        dataContainer.setRightComponent(scrollPane);
        dataContainer.setVisible(true);
    }
   
    public void createAndShowGUI() { 
        if(!isLoggedIn){
            createLoginView();
            getContentPane().add(loginContainer, BorderLayout.CENTER);
        }else{
            getContentPane().add(dataContainer, BorderLayout.CENTER);
        }
    }
Avatar billede mikkelbm Nybegynder
09. august 2005 - 12:50 #1
Hvad hvis du først sikrer dig, at der ikke er noget på din contentpane?

Noget a la:

public void createAndShowGUI()

        if(!isLoggedIn)
        {
            createLoginView();
            getContentPane().remove (dataContainer);
            getContentPane().add(loginContainer, BorderLayout.CENTER);
        }
        else
        {
            getContentPane().remove (loginContainer);
            getContentPane().add(dataContainer, BorderLayout.CENTER);
        }
}
Avatar billede mungojerrie Nybegynder
09. august 2005 - 13:25 #2
hmm....det duer desværre ikke.... :-(
Avatar billede _carsten Nybegynder
09. august 2005 - 14:56 #3
Afslut din add/remove med    getContentPane().validate();

Så skulle det virke.
Avatar billede mungojerrie Nybegynder
09. august 2005 - 15:12 #4
hmm, jeg har prøvet med :

    public void createAndShowGUI() {
       
        if(!isLoggedIn)
        {
            createLoginView();
            getContentPane().remove(dataContainer);
            getContentPane().add(loginContainer, BorderLayout.CENTER);
        }
        else
        {
            createDataView(true);
            getContentPane().remove (loginContainer);
            getContentPane().add(dataContainer, BorderLayout.CENTER);
           
        }
        getContentPane().validate();
        //getContentPane().repaint();
    }

uden at det virker.....

p.s. Jeg har ferie nu i en uge, så er først tilbage på tirsdag
Avatar billede mungojerrie Nybegynder
22. august 2005 - 08:49 #5
fik det til at virke :

------------------------kode-----------------------

    public void createAndShowGUI() {
        createLoginView();
    }
   
    public void createLoginView(){
        formPanel = new FormPanel();
        btnLogin.addActionListener(btnLoginActionListener);
        formPanel.addFrame("Login");
        formPanel.addComponents(txtUserName, "UserName");
        formPanel.addComponents(txtPassword, "Password");
        formPanel.addComponents(btnLogin);
        formPanel.closeFrame();
        formPanel.fillSpace();
        loginContainer.add(formPanel);
        loginContainer.setVisible(true);
        getContentPane().add(loginContainer, BorderLayout.CENTER);
    }
   
    public void switchView(){
        createDataView(true);
        loginContainer.setVisible(false);
        getRootPane().revalidate(); //<---- DETTE GØR TRICKET :-)
    }       
   
    public void createDataView(boolean isConverter){
        if(isConverter){
            ConverterServerDataView csdv = new ConverterServerDataView();
            setDataView(csdv);
            dataTable = new DataTable(csdv);           
        }else{
            FlameSealerServerDataView fssdv = new FlameSealerServerDataView();
            setDataView(fssdv);
            dataTable = new DataTable(fssdv);
        }
       
        JScrollPane scrollPane = new JScrollPane(dataTable);
        JPanel topPanel = new JPanel();
        String[] machineList = ((DefaultServerDataView)dataTable.getModel()).getMachineList();
        JComboBox machines = new JComboBox(machineList);
        JLabel lastUpdated = new JLabel();
        java.sql.Timestamp d = new java.sql.Timestamp(System.currentTimeMillis());
        lastUpdated.setText("Last updated : " + Server.getDateFormat().format(d));
        btnMoveRows = new JButton("Move");
        btnMoveRows.addActionListener(btnMoveActionListener);
        topPanel.add(machines);
        topPanel.add(lastUpdated);
        topPanel.add(btnMoveRows);
        JPanel bottomPanel = new JPanel();   
        scrollPane.setViewportView(dataTable);
        bottomPanel.add(scrollPane);
        dataContainer.setDividerLocation(110);
        dataContainer.setEnabled(false);
        dataContainer.setLeftComponent(topPanel);
        dataContainer.setRightComponent(scrollPane);
        dataContainer.setVisible(true);
        getContentPane().add(dataContainer, BorderLayout.CENTER);
    }   

---------------------kodeslut--------------------

takker for inputtene drenge! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester