我創建具有以下面板的GUI:JPanels以及它們之間處理事件
持有程序中的所有面板主框架:
public class Main extends JFrame { private Signup signupForm; private Login login; private UserScreen user; private JPanel cards; private CardLayout cl; private static final int INNER_FRAME_WIDTH=800; private static final int INNER_FRAME_HEIGHT=800; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main frame = new Main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, INNER_FRAME_HEIGHT, INNER_FRAME_WIDTH); getContentPane().setLayout(new GridLayout(0, 1, 0, 0)); cards = new JPanel(); getContentPane().add(cards); cl = new CardLayout(); cards.setLayout(cl); login = new Login(); cards.add(login,"login"); signupForm = new Signup(); cards.add(signupForm,"signup"); ActionListener listen = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ //check for a user with the parameters from userName and password fields . On success create a UserScreen for the current user. //This means that you need to send the User object to the UserScreen c'tor. It should look something like this. Might need to change UserScreen accordingly. user = new UserScreen(); cards.add(user,"user"); cl.show(cards,"user"); } catch (Exception exception){ //TODO: Change to exception thrown from Client constructor //TODO: Have the exception popup the relevant screen. } } }; login.loginBtn.addActionListener(listen); << Example of setting a button's actionListener from Main. setLoginListeners(); setSignupListeners(); }
}
A登錄面板 - 這是您在打開程序時遇到的屏幕。
註冊面板 - 當您在登錄面板上按下「註冊」按鈕時,您會看到此屏幕。
用戶屏幕 - 顯示用戶信息的屏幕。
我遇到這我不知道如何處理的問題:
點擊登錄面板中的「登錄」按鈕後,我想切換到新用戶的屏幕(UserScreen目的)。 由於類登錄沒有訪問UserScreen對象(只有主框架),我不得不從主類設置按鈕的actionListener,這似乎是一個可怕的解決方案(因爲它要求我給主要訪問權限「登錄」面板中的許多字段,以便它可以檢查具有給定用戶名和密碼的用戶是否存在等)。有沒有更好的辦法?
有沒有比我有的更好的解決方案?
你可以實現一個'調解器'。 – nachokk
*「JPanels和處理它們之間的事件」*不要擴展'JPanel',而只是使用一個實例。一旦你弄清楚了,你會意識到這是一個沒有問題的問題。 –
我試圖找到這樣的東西看看這個內容http://stackoverflow.com/questions/10781401/switching-between-screens-in-java-swing.see如果這可以幫助你任何方式 –