0

Swing で複数のパネル間を移動する方法を考え出そうとしています。ガラスパネルを使用するのではなく、CardLayout を使用してこれを行いたいと思います。これは、これがこの仕事に適したツールであるように思われるためです (ただし、そうでない場合はお気軽に修正してください)。私はこれをほぼ達成するテストケースを書きましたが、2つの面で不十分です。廃止された「show()」メソッドを使用し、さらに 2 番目のカードに切り替えた後、card1 のボタンが不思議なことに再び表面に浮かび始めます!

public class test extends JPanel implements ActionListener{
    final static int extraWindowWidth = 100;
    JButton jbtnOne = new JButton("Button 1");
        JPanel cardPanel = new JPanel(new CardLayout());
        JPanel card1 = new JPanel();
        JPanel card2 = new JPanel();

    public void addComponentToPane(Container pane) {

        //Create the "cards".
        JPanel card1 = new JPanel() {
            public Dimension getPreferredSize() {
                Dimension size = super.getPreferredSize();
                size.width += extraWindowWidth;
                return size;
            }
        };


        card1.add(jbtnOne);
        card1.add(new JButton("Button 2"));
        card1.add(new JButton("Button 3"));     
        card2.add(new JTextField("TextField", 20));

        cardPanel.add(card1, "card1");
        cardPanel.add(card2, "card2");

        pane.add(cardPanel, BorderLayout.CENTER);
        jbtnOne.addActionListener(this);
    }

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TabDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        test demo = new test();
        demo.addComponentToPane(frame.getContentPane());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource() ==  jbtnOne){
            System.out.println("HERE");
            card2.show();
        }
    }
}
4

1 に答える 1

2

がコンポーネントを管理しているため、 の代わりにCardLayoutを呼び出す必要があります。showCardLayoutJPanel#show

CardLayout cardLayout = (CardLayout) cardPanel.getLayout();
cardLayout.show(cardPanel, "card2");

または、カードコンポーネントを切り替えるときに、次を使用することもできます

cardLayout.next(cardPanel);
于 2013-02-10T23:20:19.567 に答える