2013-03-28 25 views
1

我正在使用Eclipse IDE。我已將不同班級的Panel從JPanel添加到不同班級的JFrame如何添加一個新的JPanel實例,每次我點擊JButton中的JFrame中的Java Swing

我在框架上添加了一個'新'JButton。我在該按鈕的actionListener事件上添加了<JPanel instance>.setVisible(true)。但是當我按下「新建」按鈕時,它會顯示先前的JPanel實例。當我按'新'JButton時,我想添加該面板的一個新實例。

這裏是我的按鈕的代碼:

final Rec r = new Rec(); 
JButton btnNew = new JButton("New Receipt"); 
btnNew.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     r.setVisible(true); 
     contentPane.add(r,BorderLayout.CENTER); 
    } 
}); 

這裏,建議是延長的JPanel類。

+1

請出示你的代碼 – Apurv

+0

「_I從添加面板一個不同的類將JPanel擴展到另一個類的JFrame_「你應該有一個很好的理由來做到這一點。 –

+0

也可以告訴我們什麼'Rec r = new Rec()'包含什麼?你想要做什麼? –

回答

2

首先,您需要在支持多個面板的框架上使用LayoutManager。我建議現在看看FlowLayout--如果你剛剛開始使用Swing,那麼學習最簡單。您還需要致電frame.add(panel)來顯示面板。您不需要撥打setVisible(true),因爲默認情況下所有JPanel實例都可見。

您還需要調用revalidate()repaint()JFrame當添加或刪除面板 - 這迫使佈局本身在JFrame的基本Component列表中所做的任何更改更新。

1

我不知道你的完整代碼,所以在這裏做了一個簡短的例子來澄清事情。

  • 如上回答說,你需要調用revalidate()repaint()
  • 更改/修改,按您的LayoutManager

    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.*; 
    import javax.swing.SwingUtilities; 
    
    /** 
    * @author rohan 
    */ 
    public class TestPanel { 
    
        private JFrame frame; 
        private JPanel panel; 
        private JTextArea jTextArea; 
        private JButton butt; 
    
        TestPanel() { 
         createGUI(); 
         process1(); 
        } 
    
        private void process1() { 
         jTextArea.setText("hii"); 
         frame.setVisible(true); 
        } 
    
        private void createGUI() { 
         butt = new JButton("button"); 
         frame = new JFrame(); 
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         panel = new JPanel(); 
         jTextArea = new JTextArea(20, 20); 
         panel.add(jTextArea); 
         panel.add(butt); 
         butt.addActionListener(new ActionListener() { 
          @Override 
          public void actionPerformed(ActionEvent ae) { 
           final JPanel pan = new JPanel(); 
           JButton but = new JButton("CHANGED"); 
           pan.add(but); 
           SwingUtilities.invokeLater(new Runnable() { 
            @Override 
            public void run() { 
             frame.add(pan); 
             butt.setVisible(false); 
             jTextArea.setVisible(false); 
             pan.revalidate(); 
             pan.repaint(); 
            } 
           }); 
          } 
         }); 
         frame.add(panel); 
         frame.pack(); 
         frame.setVisible(false); 
        } 
    
        public static void main(String[] args) { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           new TestPanel(); 
          } 
         }); 
        } 
    } 
    
+1

@trashgod感謝編輯。請記住:) –

相關問題