2016-12-23 9 views
-1

私はいくつかのオプションの1つを選択することができるGUIを作っています。これにはより多くのオプション(ボタン)があります。私はJavaでの経験がなく、何か問題があります。JFrameとJPanels

なぜthis.dispose()Button11をクリックした後に新しいJPanelが開けないのですか?どうすれば新しいJPanelを正確にPanel11に開くことができますか?アドバイスをいただけますか?

class Panel1 extends JPanel 
{ 
private Frame frame; 
private JButton backButton; 
private JButton Button11; 
private JButton Button12; 
private JButton Button13; 

public Panel1(Frame f) 
{ 
frame=f; 

setPreferredSize(new Dimension(500,500)); 
backButton=new JButton("Back"); 
Button11=new JButton("Z warunkami atmosferycznymi"); 
Button12=new JButton("Z kontrolą ruchu lotniczego"); 
Button13=new JButton("Z uszkodzeniem/awarią"); 

add(new JLabel("Podczas lotu")); 
add(backButton); 
add(Button11); 
add(Button12); 
add(Button13); 

backButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e){ 
    frame.back(); } 
           } 
); 

Button11.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    Panel11 panel = new Panel11(); 
    panel.setVisible(true); 
    panel.setLocationRelativeTo(null); 
    this.dispose(); 
     } 
} 
); 
    } 
} 

class Panel11 extends JPanel 
{ 

private Frame frame; 
private JButton backButton; 

public Panel11(Frame f) 
{ 
frame=f; 

setPreferredSize(new Dimension(200,500)); 
backButton=new JButton("Back"); 
add(new JLabel("Podczas rotacji")); 
add(backButton); 
backButton.addActionListener(new ActionListener() 
           { 
           @Override 
           public void actionPerformed(ActionEvent e) 
           { 
            frame.back(); 
           } 
           } 
); 
} 
} 

class Frame extends JFrame 
{ 

private JPanel main; 
private JButton button1; 
private Panel1 panel1; 


public Frame() 
{ 
super("Algorytm przydziału kodów opóźnień"); 

main=new JPanel(); 
main.setPreferredSize(new Dimension(400,200)); 
panel1=new Panel1(this); 

button1=new JButton("Podczas lotu"); 
button1.addActionListener(new ActionListener() 
          { 
          @Override 
          public void actionPerformed(ActionEvent e) 
          { 
           update(panel1); 
          } 
          } 
); 

main.add(button1); 

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
add(main); 
pack(); 
setResizable(true); 
setVisible(true); 
} 

public void back() 
{ 
update(main); 
} 

private void update(JPanel panel) 
{ 
remove(panel1); 
remove(main); 
add(panel); 
pack(); 
panel.setVisible(true); 
setVisible(true); 
} 
} 


public class Main 
{ 
public static void main(String[] args) 
{ 
new Frame(); 
} 
}  
+0

あなたは何をしたいのかを明確にしてください:button11をクリックするとパネル11がJframeに表示されますか? – SteelToe

+0

@ MarrieteCowby12あり – Szymsss

+0

Java **はJavascriptではありません!タグを正しく使用してください!そして、あなたのコードを正しくインデントし、あなたの問題を実証する有効な[mcve](つまり、コード全体ではなく簡単な例)を投稿し、コピー&ペーストしてそれは私たちのPCに – Frakcool

答えて

2

あなたのエラー、あなたが呼び出しているためである。

Panel11 panel = new Panel11(); 

を、のはPanel11のコンストラクタ(複数可)を見てみましょう:

public Panel11(Frame f) 
public Panel11() 

あなたがどんな違いを見つけるのですか?はい、私は知っている、あなたはpublic Panel11()を書いたことはありませんでしたが、それはデフォルトでそこにあるので、あなたはそれを呼び出しているのでそれは空ですので、Frameへの参照を渡す必要がありますまたFrameの代わりにJFrameFrameはAWTに属し、JFrameはSwingに属しているためです。

あなたは適切なコードをインデントして、次のものがあり、あなたが複数のJFramesを使用している、The use of multiple JFrames, Good/Bad practice?(BADを!)を参照してください、それが「doesnの場合は代わりにあなたがCard LayoutまたはDialogs

を使用する場合がありますことを発見しただろう有効な投稿を投稿してくださいMinimal, Complete and Verfiable Example

関連する問題