2013-11-21 87 views
0

我试图做一个向导而不使用库,我见过很容易使巫术师哈哈它的一个项目,我做了布局和框架和面板,有什么麻烦是当我点击“ - >”它不会去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); 
} 


     } 
    } 

谢谢:)

回答

1

你都扩展JFrame中,并创建自己的JFrame。这意味着你有两个JFrame实例。一个是你的WizardGUI类,我猜是在你的主引用的地方,另一个是一个名为frame的局部变量。

在构造函数中,您正在构建frame实例中的所有内容。在Sscreen方法中,您正在修改this实例,因此您没有对frame实例进行修改。

您应该摆脱本地变量frame并用this替换对它的所有引用。

另外,您应该在WizardGUI构造函数中调用super("Wizard")作为第一行。调用父构造函数很重要,每个人都忘记这么做。

+0

谢谢!使它工作我也把内容放在框架上而不是面板上。啊!! :) – Rafa579

+0

+1尤其对于超级构造函数的提及。 :) – brimborium