2015-04-19 104 views
0

球员我是java编程的新手,现在我必须处理GUI编程。我有这个简单的程序供管理员现在创建播放器。我有一个视图类来显示菜单,所以当用户点击创建播放器时,界面将显示。Java GUI编程关闭当前框架

然后在该菜单中,我有一个actionListener转到另一个方法,并显示弹出菜单,然后显示玩家创建成功。现在的问题是我如何重新显示主菜单,而不是创建播放器菜单。

将有一些管理员处理功能,但现在我只需完成第一个功能,其余的将类似。当点击主菜单(创建播放器按钮)时,它将转到另一个函数(JFrame)以请求输入,再次转到另一个函数以从文本字段中获取文本并将其保存到文件

我的代码为tpublic void show (){

JFrame frame = new JFrame("Admin"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainPanel = new JPanel(); 
    mainPanel.setPreferredSize(new Dimension(300,300)); 
    panel1 = new JPanel(new GridLayout(6,1)); 


    text = new JLabel("Admin Main Menu"); 
    text.setFont(new Font("Lucida",Font.PLAIN,24)); 
    //set panel layout (rows,cols,hgap,vgap) 
    panel1.setLayout(new GridLayout(0,1,10,10)); 

    button1 = new JButton("Create a player"); 
    button2 = new JButton("Delete a player"); 
    button3 = new JButton("Top up Player's Chips"); 
    button4 = new JButton("Reset Player's password"); 
    button5 = new JButton("Change admin's password"); 
    button6 = new JButton("Logout"); 

    mainPanel.add(text); 
    panel1.add(button1); 
    panel1.add(button2); 
    panel1.add(button3); 
    panel1.add(button4); 
    panel1.add(button5); 
    panel1.add(button6); 
    mainPanel.add(panel1); 

    frame.add(mainPanel); 
    frame.pack(); 
    frame.setVisible(true); 

    button1.addActionListener(new createPlayerListener()); 

按钮1将得到创建播放菜单

private class createPlayerListener implements ActionListener 
{ 

    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     JFrame frame1 = new JFrame("Admin"); 
     frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     text = new JLabel("Create a Player"); 
     text.setFont(new Font("Lucida",Font.PLAIN,24)); 

     mainPanel = new JPanel(new GridLayout(3,1)); 
     mainPanel.setPreferredSize(new Dimension(500,400)); 
     panel1 = new JPanel(); 
     //panel1.setPreferredSize(new Dimension(300,200)); 
     panel1.setLayout(new GridLayout(4,2,10,10)); 
     name = new JLabel("Enter new player name:"); 
     nameTextfield = new JTextField(); 
     pw = new JLabel("Enter new player password:"); 
     pwTextfield = new JTextField(); 
     chip = new JLabel("Enter new player chips:"); 
     chipTextfield = new JTextField(); 
     button1 = new JButton("Create Player"); 

     mainPanel.add(text); 
     panel1.add(name); 
     panel1.add(nameTextfield); 
     panel1.add(pw); 
     panel1.add(pwTextfield); 
     panel1.add(chip); 
     panel1.add(chipTextfield); 
     mainPanel.add(panel1); 
     mainPanel.add(button1); 

     frame1.add(mainPanel); 
     frame1.pack(); 
     frame1.setVisible(true); 

     button1.addActionListener(new playerListener()); 

    } 
} 


private class playerListener implements ActionListener 
{ 

    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     String name = nameTextfield.getText(); 
     String pw = pwTextfield.getText(); 
     String chip = chipTextfield.getText(); 
     int chips = Integer.parseInt(chip); 
     //System.out.println(text); 
     controller.createPlayer(name, pw, chips); 

     //pop up window player created 
     JFrame frame2 = new JFrame(); 
     JOptionPane.showMessageDialog(frame2, "Player Created Successfully!"); 




    } 
} 
+0

或可我能够在同一createPlayerListener内getText以便我可以将它保存到文件中?所以我不必打电话给playerListener –

+0

我可以快速看到一个主要问题,你是在实例化mainPanel两次,在主代码和actionPerformed方法中,第二个将覆盖第一个,一旦frame1被处置,它不再有效。 – faljbour

回答

1

两个问题与您的代码,创建的mainPanel两次,你可以这样做,如果你在本地定义不是全局的,否则更改名称到mainPanel1和mainPanel2,第二个问题是哟你正在调用frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);一旦你关闭frame1就关闭应用程序。我想这个代码和它的作品,看到我给它所做的更改,

JPanel mainPanel = new JPanel(); 
mainPanel.setPreferredSize(new Dimension(300,300)); 
JPanel panel1 = new JPanel(new GridLayout(6,1)); 


JLabel text = new JLabel("Admin Main Menu"); 
text.setFont(new Font("Lucida",Font.PLAIN,24)); 
//set panel layout (rows,cols,hgap,vgap) 
panel1.setLayout(new GridLayout(0,1,10,10)); 

JButton button1 = new JButton("Create a player"); 
JButton button2 = new JButton("Delete a player"); 
JButton button3 = new JButton("Top up Player's Chips"); 
JButton button4 = new JButton("Reset Player's password"); 
JButton button5 = new JButton("Change admin's password"); 
JButton button6 = new JButton("Logout"); 

mainPanel.add(text); 
panel1.add(button1); 
panel1.add(button2); 
panel1.add(button3); 
panel1.add(button4); 
panel1.add(button5); 
panel1.add(button6); 
mainPanel.add(panel1); 

add(mainPanel, BorderLayout.CENTER); 

button1.addActionListener(new createPlayerListener()); 

这里是你的createPlayerListner修改,playerListner保持不变,

private class createPlayerListener implements ActionListener 
    { 

    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     JFrame frame1 = new JFrame("Admin"); 
     JLabel text = new JLabel("Create a Player"); 
     text.setFont(new Font("Lucida",Font.PLAIN,24)); 

     JPanel mainPanel = new JPanel(new GridLayout(3,1)); 
     mainPanel.setPreferredSize(new Dimension(500,400)); 
     JPanel panel1 = new JPanel(); 
     //panel1.setPreferredSize(new Dimension(300,200)); 
     panel1.setLayout(new GridLayout(4,2,10,10)); 
     JLabel name = new JLabel("Enter new player name:"); 
     nameTextfield = new JTextField(); 
     JLabel pw = new JLabel("Enter new player password:"); 
     pwTextfield = new JTextField(); 
     JLabel chip = new JLabel("Enter new player chips:"); 
     chipTextfield = new JTextField(); 
     JButton button1 = new JButton("Create Player"); 

     mainPanel.add(text); 
     panel1.add(name); 
     panel1.add(nameTextfield); 
     panel1.add(pw); 
     panel1.add(pwTextfield); 
     panel1.add(chip); 
     panel1.add(chipTextfield); 
     mainPanel.add(panel1); 
     mainPanel.add(button1); 

     frame1.add(mainPanel); 
     frame1.pack(); 
     frame1.setVisible(true); 

     button1.addActionListener(new playerListener()); 

    } 
    }