所以我试图让一个按钮打开一个来自不同类的JFrame以及同一个类中的JFrame作为不同方法的一部分,我完全迷失了。这是代码。我第一次尝试按下按钮打开一个新JFrame的实例是在" mal"和" fem"动作听众。
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 :(得分: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方法内的按钮中添加动作侦听器,初始化另一帧。感谢。
答案 1 :(得分: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
发生后你想做的事完全取决于你。如果你不了解某些事情,那就问问。
答案 2 :(得分:0)
快速解决方法是在公共类旁添加implements ActionListener
。
该类通常在运行后立即识别ActionListener。
答案 3 :(得分: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
}