2013-11-21 4 views
0

라이브러리를 사용하지 않고 마법사를 만들려고합니다. 마법사를 쉽게 만들 수있게 만들었습니다. 레이아웃과 프레임 및 패널을 완료했습니다. 무엇이 문제입니까? "->"을 클릭하면 패널 2로 이동하지 않고 아무 일도 일어나지 않고 이름을 저장하지만 그만합니다. 아무도 나를 도울 수 있니?Jpanel에서 다른 Jpanel을 호출하는 ActionListener

이제 편집하십시오 :) 이제 두 번째 "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 클래스이고 다른 하나는 main이라는 로컬 변수이며 다른 하나는 frame이라는 로컬 변수입니다.

생성자에서 frame 인스턴스의 모든 것을 작성합니다. Sscreen 메서드에서 this 인스턴스를 수정하면 frame 인스턴스에 수행 한 작업이 수정되지 않습니다.

로컬 변수 frame을 제거하고 모든 참조를 this으로 바꿔야합니다.

또한 WizardGUI 생성자에서 첫 번째 행으로 super("Wizard")을 호출해야합니다. 부모 생성자를 호출하는 것은 중요하며 모든 사람들은 그렇게하는 것을 잊어 버립니다.

+0

감사합니다. 그것이 작품이 아니라 패널에 프레임에 내용을 넣고있었습니다. 우 !! :) – Rafa579

+0

+1 특히 슈퍼 생성자 언급. :) – brimborium

관련 문제