2014-12-20 3 views
1

Итак, я попытался открыть кнопку JFrame из другого класса, а также из одного класса, как часть другого метода, и я полностью потерял , Вот код. Экземпляры, в которых я впервые пытаюсь открыть кнопку, открывают новый JFrame, это прослушиватели действий «mal» и «fem».Как открыть новый JFrame с JButton из другого класса

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class InteractiveName { 
public String name = "blank"; 
public String gender = "blank"; 
public InteractiveName() 
{ 
    frame1(); 
    frame2(); 
    frame3(); 
} 

public void frame1(){ 


    JFrame j = new JFrame("Interactive Person Identifier"); 
    JPanel p = new JPanel(new GridBagLayout()); 
    JButton mal = new JButton("Male"); 
    JButton fem = new JButton("Female"); 


    j.setSize(400,400); 
    j.setVisible(true); 
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    j.setLocationRelativeTo(null); 
    GridBagConstraints c = new GridBagConstraints(); 

    c.insets = new Insets(40,40,40,40); 

    c.gridx = -2; 
    c.gridy = 0; 
    p.add(mal,c); 

    c.gridx = 2; 
    c.gridy = 0; 
    p.add(fem,c); 

    mal.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e){ 
      gender = "male"; 

     } 



    }); 

    fem.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e){ 
      gender = "female"; 
      j2.setVisible(true); 


     } 



    }); 

    j.add(p, BorderLayout.SOUTH); 
} 

public void frame2(){ 

    JFrame j2 = new JFrame("Interactive Person Identifier"); 
    JPanel p2 = new JPanel(new GridBagLayout()); 
    JButton conf = new JButton("Confirm"); 
    JTextField nameinput = new JTextField(); 



    j2.setVisible(false); 
    j2.setSize(400, 400); 
    j2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    j2.setLocationRelativeTo(null); 
    GridBagConstraints c2 = new GridBagConstraints(); 


    c2.insets = new Insets(40,40,40,40); 

    j2.add(p2, BorderLayout.SOUTH); 

    c2.gridx = 0; 
    c2.gridy = 2;  
    p2.add(nameinput, c2); 

    c2.gridx = 0; 
    c2.gridy = 0; 
    p2.add(conf,c2); 

    conf.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent ae){ 

      name = nameinput.getText(); 


     } 



    }); 




} 


public void frame3(){ 

    JFrame f3 = new JFrame("Confirmation"); 
    JPanel p3 = new JPanel(new GridBagLayout()); 
    JButton yes = new JButton("Yes"); 
    JButton no = new JButton("No"); 
    JLabel thankyou = new JLabel("Thank you for your participation. Is the above information correct?"); 
    JLabel info = new JLabel("You are a " + gender + ". You name is "+name+"."); 

    f3.setVisible(false); 
    f3.setSize(400,400); 
    f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f3.setLocationRelativeTo(null); 
    f3.add(p3); 


    GridBagConstraints c3 = new GridBagConstraints(); 

    c3.insets = new Insets(40,40,40,40); 

    c3.gridx = -3; 
    c3.gridy = -2; 
    p3.add(yes,c3); 

    yes.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent aae){ 

      JOptionPane.showMessageDialog(null, "This program is over"); 
      System.exit(0); 
     } 

    }); 

    no.addActionListener(new ActionListener(){ 


     public void actionPerformed(ActionEvent aeeee){ 

      JOptionPane.showMessageDialog(null, "You're an idiot, have fun starting over."); 
      System.exit(0); 


     } 

    }); 


    c3.gridx = -3; 
    c3.gridy = 2; 
    p3.add(no,c3); 

    c3.gridx = 0; 
    c3.gridy = 0; 
    p3.add(info,c3); 

    c3.gridx = 0; 
    c3.gridy = -1; 
    p3.add(thankyou,c3); 


} 






} 
+0

Смотрите также [Использование нескольких JFrames, хорошую/плохую практика?] (Http://stackoverflow.com/q/9554636/418556) –

+0

'JButton ТЗ = новый JButton ("Мужской"); JButton fem = new JButton («Женщина»), 'должны быть объектами' JRadioButton' в ['ButtonGroup'] (https://docs.oracle.com/javase/8/docs/api/javax/swing/ButtonGroup .html) .. –

ответ

0

Все, что вам нужно сделать, это добавить ActionListener к JButton, после нажатия вы можете просто создать экземпляр нового кадра. Что-то похожее на это:

fem.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     dispose(); 

     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      MyNewFreame newFrame = new MyNewFrame(); 
      newFrame.setVisible(true); 
     } 
     }); 

    } 
}); 

Очевидно, что вы хотите делать, когда actionPerformed происходит это полностью зависит от вас. Если вы что-то не понимаете, просто спросите.

0

Быстрое исправление будет добавлять implements ActionListener рядом с общедоступным классом.

Класс обычно распознает ActionListener, как только вы его запустите.

1

Один подход к инициализации JFrame из того же класса:

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Try extends JFrame implements ActionListener{ 

    JButton button=new JButton("Button"); 
    public Try(){ 
     setLayout(new FlowLayout()); 
     button.addActionListener(this); 
     add(button); 
    } 

public void actionPerformed(ActionEvent event){ 
    JFrame newFrame=new JFrame(); 
    newFrame.setVisible(true); 
    newFrame.setSize(new Dimension(500,400)); 
    } 

public static void main(String[] args) { 

    Try t=new Try(); 
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    t.setVisible(true); 
    t.setSize(new Dimension(500,400)); 
} 

}

Вы можете добавить слушателя действия для кнопки в первом кадре и внутри метода actionPerformed, инициализировать другой кадр. Благодарю.

0

Попробуйте этот. Я запускаю этот код в Netbeans, и он работает хорошо.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class NewJFrame extends javax.swing.JFrame { 

public NewJFrame() { 
    initComponents(); 
    frame1(); 
} 



// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jTextField1 = new javax.swing.JTextField(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jTextField1.setText("jTextField1"); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(140, 140, 140) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(164, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
      .addContainerGap(169, Short.MAX_VALUE) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(111, 111, 111)) 
    ); 

    pack(); 
}// </editor-fold>       


public String name = "blank"; 
public String gender = "blank"; 


public void frame1(){ 


JFrame j = new JFrame("Interactive Person Identifier"); 
JPanel p = new JPanel(new GridBagLayout()); 
JButton mal = new JButton("Male"); 
JButton fem = new JButton("Female"); 


j.setSize(400,400); 
j.setVisible(true); 
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
j.setLocationRelativeTo(null); 
GridBagConstraints c = new GridBagConstraints(); 

c.insets = new Insets(40,40,40,40); 

c.gridx = -2; 
c.gridy = 0; 
p.add(mal,c); 

c.gridx = 2; 
c.gridy = 0; 
p.add(fem,c); 

mal.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     gender = "male"; 
     frame2(); 
    } 

}); 

fem.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     gender = "female"; 
     frame2(); 
    } 

}); 

j.add(p, BorderLayout.SOUTH); 
} 

public void frame2(){ 

JFrame j2 = new JFrame("Interactive Person Identifier"); 
JPanel p2 = new JPanel(new GridBagLayout()); 
JButton conf = new JButton("Confirm"); 
JTextField nameinput = new JTextField(); 

nameinput.setPreferredSize(new Dimension(200, 40)); 
j2.setVisible(true); 
j2.setSize(400, 400); 
j2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
j2.setLocationRelativeTo(null); 
GridBagConstraints c2 = new GridBagConstraints(); 


c2.insets = new Insets(40,40,40,40); 

j2.add(p2, BorderLayout.SOUTH); 

c2.gridx = 0; 
c2.gridy = 2;  
p2.add(nameinput, c2); 

c2.gridx = 0; 
c2.gridy = 0; 
p2.add(conf,c2); 

conf.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent ae){ 

     name = nameinput.getText(); 
frame3(); 

    } 

}); 

} 


public void frame3(){ 

JFrame f3 = new JFrame("Confirmation"); 
JPanel p3 = new JPanel(new GridBagLayout()); 
JButton yes = new JButton("Yes"); 
JButton no = new JButton("No"); 
JLabel thankyou = new JLabel("Thank you for your participation. Is the above information correct?"); 
JLabel info = new JLabel("You are a " + gender + ". You name is "+name+"."); 

f3.setVisible(true); 
f3.setSize(600,400); 
f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f3.setLocationRelativeTo(null); 
f3.add(p3); 
info.setPreferredSize(new Dimension(600, 20)); 
thankyou.setPreferredSize(new Dimension(600, 20)); 
GridBagConstraints c3 = new GridBagConstraints(); 

c3.insets = new Insets(40,40,40,40); 

c3.gridx = -3; 
c3.gridy = -2; 
p3.add(yes,c3); 

yes.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent aae){ 

     JOptionPane.showMessageDialog(null, "This program is over"); 
     System.exit(0); 
    } 

}); 

no.addActionListener(new ActionListener(){ 


    public void actionPerformed(ActionEvent aeeee){ 

     JOptionPane.showMessageDialog(null, "You're an idiot, have fun starting over."); 
     System.exit(0); 


    } 

}); 


c3.gridx = -3; 
c3.gridy = 2; 
p3.add(no,c3); 

c3.gridx = 0; 
c3.gridy = 0; 
p3.add(info,c3); 

c3.gridx = 0; 
c3.gridy = -1; 
p3.add(thankyou,c3); 


} 


public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(false); 

     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JTextField jTextField1; 
// End of variables declaration     
}