ActionListener从Jpanel调用另一个Jpanel
问题描述:
我试图做一个向导而不使用库,我见过很容易使巫术师哈哈它的一个项目,我做了布局和框架和面板,有什么麻烦是当我点击“ - >”它不会去panel2,什么也没有发生,它确实存储了名称,但是这是它。有人能帮我吗?ActionListener从Jpanel调用另一个Jpanel
编辑它现在的作品:)现在我有麻烦显示第二个“panel2”它后,我没有成为什么后,我点击箭头。笑
package project4;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class WizardGUI extends JFrame implements ActionListener {
private JLabel enterName;
private JTextField name;
private JButton prev, fow;
private String storeName = "";
WizardGUI(){
super("Wizard");
name();
}
void name()
{
JPanel FPanel = new JPanel();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
// JLabel textLabel = new JLabel("lol");
//textLabel.setPreferredSize(new Dimension(300, 100));
// frame.getContentPane().add(textLabel);
//prev = new JButton("<--");
fow = new JButton ("-->");
this.add(FPanel);
enterName = new JLabel("Enter Your Name: ");
name = new JTextField(10);
enterName.setBounds(60, 30,120,30);
name.setBounds(80,60,130,30);
this.setSize(300,390); //set frame size
this.setVisible(true);
FPanel.add(enterName);
FPanel.add(name);
//FPanel.add(prev);
FPanel.add(fow);
fow.addActionListener(this);
}
void enter()
{
JPanel panel2 = new JPanel();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
//prev = new JButton("<--");
fow = new JButton ("-->");
this.add(panel2);
enterName = new JLabel("Enter Your Name: ");
name = new JTextField(10);
enterName.setBounds(60, 30,120,30);
name.setBounds(80,60,130,30);
this.setSize(300,390); //set frame size
this.setVisible(true);
panel2.add(enterName);
panel2.add(name);
//FPanel.add(prev);
panel2.add(fow);
fow.addActionListener(this);
this.getContentPane().removeAll();
validate();
repaint();
this.add(panel2);
}
void add()
{
}
void select()
{
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == fow) {
storeName = name.getText();
enter();
//JOptionPane.showMessageDialog(null, "hello " + storeName);
}
}
}
谢谢:)
答
你都扩展JFrame中,并创建自己的JFrame。这意味着你有两个JFrame实例。一个是你的WizardGUI类,我猜是在你的主引用的地方,另一个是一个名为frame的局部变量。
在构造函数中,您正在构建frame
实例中的所有内容。在Sscreen方法中,您正在修改this
实例,因此您没有对frame
实例进行修改。
您应该摆脱本地变量frame
并用this
替换对它的所有引用。
另外,您应该在WizardGUI构造函数中调用super("Wizard")
作为第一行。调用父构造函数很重要,每个人都忘记这么做。
谢谢!使它工作我也把内容放在框架上而不是面板上。啊!! :) – Rafa579
+1尤其对于超级构造函数的提及。 :) – brimborium