1

私はEclipse IDEを使用しています。JPanel別のクラスの に拡張する別のクラスから Panel を追加しましたJFrame

JButtonフレームに「新規」を追加しました。<JPanel instance>.setVisible(true)そのボタンのactionListenerイベントを追加しました。しかし、「新規」ボタンを押すと、以前のインスタンスが表示されますJPanel。「New」を押したときに、そのパネルの新しいインスタンスを追加したい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);
    }
});

ここで、Rec は JPanel を拡張したクラスです。

4

2 に答える 2

2

LayoutManagerまず、複数のパネルをサポートするフレームでを使用する必要があります。今のところ調べてみることをお勧めします。SwingFlowLayoutを初めて使用する場合は、最も簡単に学習できます。frame.add(panel)パネルを表示するためにも呼び出す必要があります。デフォルトでsetVisible(true)はすべてのインスタンスが表示されるため、呼び出す必要はありません。JPanel

また、パネルを追加または削除するたびに、 でrevalidate()とを呼び出す必要があります。これにより、の基になるリストで行われたすべての変更でレイアウトが自動的に更新されます。repaint()JFrameJFrameComponent

于 2013-03-28T15:27:42.047 に答える
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();
                }
            });
        }
    }
    
于 2013-03-28T16:24:15.363 に答える