2013-11-21 2 views
0

Я пытаюсь создать Wizard без использования библиотек, которые я видел, чтобы легко сделать мастеров для его проекта, я сделал макет, рамки и панели, что у меня проблемы с когда я нажимаю «->», он не переходит на панель2, ничего не происходит, он сохраняет имя, но это все. Может ли кто-нибудь помочь мне?ActionListener для вызова другого Jpanel из Jpanel

EDIT это работает сейчас :) Теперь у меня возникли проблемы с отображением второй «панели2», после чего я не нажимаю стрелку. лол

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.

Также вы должны позвонить super("Wizard") в качестве первой строки в конструкторе WizardGUI. Вызов родительских конструкторов важен, и все это забывают.

+0

Спасибо! Сделал это работу, я также помещал контент в рамку, а не панель. тьфу !! :) – Rafa579

+0

+1 Специально для упоминания супер-конструктора. :) – brimborium

Смежные вопросы