2016-02-22 50 views
0

這裏打開與JButton的新JFrame的是我的代碼:無法從一個不同的類

LoginPage:

public class LoginPage { 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       LoginPage window = new LoginPage(); 
       window.frmLoginPage.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

private JFrame frmLoginPage; 
private JPasswordField passwordField; 
private JTextField textField; 

/** 
* Create the application. 
*/ 
public LoginPage() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frmLoginPage = new JFrame(); 
    frmLoginPage.setTitle("Login Page"); 
    frmLoginPage.getContentPane().setBackground(new Color(100, 149, 237)); 
    frmLoginPage.setBounds(100, 100, 742, 597); 
    frmLoginPage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmLoginPage.getContentPane().setLayout(null); 

    JPanel panel = new JPanel(); 
    panel.setBorder(new LineBorder(new Color(0, 0, 0), 3, true)); 
    panel.setBackground(Color.WHITE); 
    panel.setBounds(131, 106, 459, 288); 
    frmLoginPage.getContentPane().add(panel); 
    panel.setLayout(null); 

    JLabel lblUserLogin = new JLabel("User Login"); 
    lblUserLogin 
      .setIcon(new ImageIcon(LoginPage.class.getResource("/javax/swing/plaf/metal/icons/ocean/info.png"))); 
    lblUserLogin.setFont(new Font("Trebuchet MS", Font.PLAIN, 34)); 
    lblUserLogin.setHorizontalAlignment(SwingConstants.CENTER); 
    lblUserLogin.setBounds(114, 16, 243, 39); 
    panel.add(lblUserLogin); 

    JLabel lblUserId = new JLabel("User ID:"); 
    lblUserId.setBounds(52, 75, 90, 20); 
    panel.add(lblUserId); 

    JLabel lblPassword = new JLabel("Password:"); 
    lblPassword.setBounds(52, 140, 90, 20); 
    panel.add(lblPassword); 

    passwordField = new JPasswordField(); 
    passwordField.setBounds(52, 176, 282, 26); 
    panel.add(passwordField); 

    textField = new JTextField(); 
    textField.setBounds(52, 98, 283, 26); 
    panel.add(textField); 
    textField.setColumns(10); 

    JButton btnLogIn = new JButton("Log In"); 
    btnLogIn.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      new SemesterPage(); 
      frmLoginPage.setVisible(false); 
     } 
    }); 

    btnLogIn.setBounds(52, 219, 115, 29); 
    panel.add(btnLogIn); 

    JButton btnRegister = new JButton("Register"); 
    btnRegister.setBounds(179, 219, 115, 29); 
    panel.add(btnRegister); 
} 

}

當按鈕 「登錄」 被點擊,一個新的窗口在這一類應該彈出:

SemesterPage:

public class SemesterPage { 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       SemesterPage window = new SemesterPage(); 
       window.frmControlPanel.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

private JFrame frmControlPanel; 

/** 
* Create the application. 
*/ 
public SemesterPage() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frmControlPanel = new JFrame(); 
    frmControlPanel.setTitle("Control Panel"); 
    frmControlPanel.setBounds(100, 100, 1000, 1000); 
    frmControlPanel.getContentPane().setBackground(new Color(100, 149, 237)); 

    JPanel panel = new JPanel(); 
    panel.setBorder(new LineBorder(new Color(0, 0, 0), 2, true)); 

    JPanel panel_1 = new JPanel(); 
    panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2, true)); 

    JPanel panel_2 = new JPanel(); 
    panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2, true)); 
    GroupLayout groupLayout = new GroupLayout(frmControlPanel.getContentPane()); 
    groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout 
      .createSequentialGroup().addContainerGap() 
      .addComponent(panel, GroupLayout.PREFERRED_SIZE, 637, GroupLayout.PREFERRED_SIZE).addGap(30) 
      .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) 
        .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE) 
        .addComponent(panel_2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addContainerGap())); 
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING) 
      .addGroup(groupLayout.createSequentialGroup().addContainerGap() 
        .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) 
          .addComponent(panel, GroupLayout.PREFERRED_SIZE, 793, GroupLayout.PREFERRED_SIZE) 
          .addGroup(groupLayout.createSequentialGroup() 
            .addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 370, 
              GroupLayout.PREFERRED_SIZE) 
            .addGap(18).addComponent(panel_2, GroupLayout.PREFERRED_SIZE, 412, 
              GroupLayout.PREFERRED_SIZE))) 
        .addContainerGap(97, Short.MAX_VALUE))); 
    frmControlPanel.getContentPane().setLayout(groupLayout); 
    frmControlPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JMenuBar menuBar = new JMenuBar(); 
    frmControlPanel.setJMenuBar(menuBar); 

    JMenu mnFile = new JMenu("File"); 
    menuBar.add(mnFile); 

    JMenuItem mntmNew = new JMenuItem("New"); 
    mnFile.add(mntmNew); 

    JMenuItem mntmSave = new JMenuItem("Save"); 
    mnFile.add(mntmSave); 

    JMenuItem mntmLogOut = new JMenuItem("Log Out"); 
    mnFile.add(mntmLogOut); 
} 

}

問題是,窗口不會彈出。按鈕被點擊時沒有任何反應。我有一種感覺,當我調用「SemesterPage()」時,SemesterPage類中的構造函數不會啓動JFrame。我將如何去解決這個問題?

非常感謝!

+1

呼叫'調用setVisible(真)'新的幀上,就像你做的第一一? – immibis

+0

@immibis是的,但問題是「如何」;) – MadProgrammer

回答

1

您創建的SemesterPage一個新的實例,但從來沒有使其可見......

SemesterPage的人都需要,這將允許呼叫者指示它,它想使JFrame實例的方法,它它創建可見

也許像...

public class SemesterPage { 

    private JFrame frmControlPanel; 

    //... 
    public void setVisible(boolean v) { 
     frmControlPanel.setVisible(v); 
    } 

說了這麼多,你可能要稍微考慮您的設計...

首先查看The Use of Multiple JFrames, Good/Bad Practice?

然後How to Make DialogsHow to Use CardLayout對替代品的一些想法

您也可以考慮在看看Model-View-Controllerfor example

+0

這解決了我的問題,非常感謝! –

+0

@calvinphung:既然Mad的回答解決了你的問題,不要忘了對答案進行投票並接受它。如果您有關於如何執行此操作的問題,請參閱以下幫助部分:[當有人回答我的問題時](http://stackoverflow.com/help/someone-answers)。 –

+0

是的,我正要這樣做。當我能夠投票並且悲傷地接受答案時,有一段時間限制 –