2013-03-11 65 views
0

我有一個具有面板的小程序。在面板中添加一個按鈕,點擊該按鈕將移除當前面板,並將新面板添加到當前的Applet中。如何使用ActionListener在同一個Applet中添加新面板

但我沒有得到所需的輸出!

我想從ActionListener中用新面板替換當前添加到Applet的顯示面板。

請告訴錯誤!

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JApplet; 
import javax.swing.JPanel; 

public class Init extends JApplet { 

    public Display ref; 
    public NewDisplay ref2; 

    public class Display extends JPanel implements ActionListener { 

     public Display() { 
      initComponents(); 
     } 

     private void initComponents() { 
      jButton1 = new javax.swing.JButton(); 
      jButton1.setText("New Game"); 
      add(jButton1); 
      jButton1.addActionListener(this); 

     } 
     public javax.swing.JButton jButton1; 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String x = e.getActionCommand(); 
      if (x.equals("New Game")) { 
       System.out.println("clicked"); 
       //ref.setVisible(false); 
       this.removeAll(); 
       //add(ref2); 
       add(ref2); 
       invalidate(); 
       revalidate(); 
       repaint(); 
      } 
     } 
    } 

    public class NewDisplay extends JPanel { 

     public NewDisplay() { 
      setSize(800, 600); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      g.setColor(Color.RED); 
      g.fillRect(0, 0, 800, 600); 
     } 
    } 

    @Override 
    public void init() { 
     ref = new Display(); 
     ref2 = new NewDisplay(); 
     add(ref); 
     setSize(800,600); 

    } 
} 
+0

你是否縮小了問題範圍?例如:它是否到達actionPerformed()方法?它輸出「點擊」嗎? – 2013-03-11 20:55:08

+0

是的,它輸出「點擊」! – Snehasish 2013-03-11 21:22:54

回答

3

您不應該使用setSize()方法來設置組件的大小。

佈局管理器使用組件的首選大小。您應該重寫面板的getPreferredSzie()方法以返回所需的大小。

public class NewDisplay extends JPanel { 

    public NewDisplay() { 
    // setSize(800, 600); 
    } 

    @Override 
    public Dimension getPreferredSize() 
    { 
     return new Dimension(800, 600); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     g.setColor(Color.RED); 
     g.fillRect(0, 0, 800, 600); 
    } 
} 

或者更好的解決方案是使用卡片佈局,並將面板進出。見How to Use Card Layout

+0

我認爲每次我在Swing上看到一個關於佈局的問題時,每個人的回答都是「更好的解決方案就是使用<我的首選佈局>!」 :-) – 2013-03-11 21:05:25

+0

在這段代碼中,我們將刪除當前面板的組件,並將新面板添加到當前面板! 這是對的嗎? – Snehasish 2013-03-12 05:12:11

+0

如果是,我如何刪除當前面板並將新面板添加到Applet中?請澄清 !! – Snehasish 2013-03-12 05:12:47