1

1つのJFrameに2つのJPanel(右側のJPanel1と左側のJPanel2)が含まれるウェルカム画面のインターフェイスを設計しました。左側のボタンは、JPanel1のパネルを切り替えるためのものです。ボタンを押してJPanel1のコンテンツを別のJPanelに置き換えたいのですが、方法がわかりません。助けてください。

4

3 に答える 3

4

これはあなたの説明に近いものの非常に簡単な例です。左側には、右側のパネルのコンテンツを切り替えるためのハグボタンがあります。右側には、特定の境界線とラベルが付いたパネルがあります。ボタンを押すと、右側のコンテンツが他のパネルと入れ替わります。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCardLayout2 {

    protected void initUI() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel leftPanel = new JPanel(new BorderLayout());
        JLabel label = new JLabel("Left panel");
        leftPanel.add(label, BorderLayout.NORTH);
        JButton button = new JButton("Toggle right panel");
        leftPanel.add(button);
        frame.add(leftPanel, BorderLayout.WEST);

        final CardLayout cardLayout = new CardLayout();
        final JPanel rightPanel = new JPanel(cardLayout);
        rightPanel.setPreferredSize(new Dimension(200, 500));

        JPanel rightPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        rightPanel1.setBorder(BorderFactory.createLineBorder(Color.RED));
        JPanel rightPanel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        rightPanel2.setBorder(BorderFactory.createLineBorder(Color.BLUE));
        JLabel label1 = new JLabel("Right panel 1 with a red border");
        JLabel label2 = new JLabel("Right panel 2 with a blue borer");
        rightPanel1.add(label1);
        rightPanel2.add(label2);

        rightPanel.add(rightPanel1, "panel1");
        rightPanel.add(rightPanel2, "panel2");
        frame.add(rightPanel, BorderLayout.EAST);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                cardLayout.next(rightPanel);
            }
        });
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestCardLayout2().initUI();
            }
        });
    }

}
于 2012-09-11T15:01:48.927 に答える
2

に代わるCardLayoutものJRootPaneとそのJRootPane.setContentPane()方法。次に例を示します。

final JPanel panel1 = ...;
final JPanel panel2 = ...;
boolean showingPanel1 = true;
final JRootPane rootPane = new JRootPane();
rootPane.setContentPane(panel1);
JButton switchButton = new JButton("Switch");
switchButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        if (showingPanel1) {
            rootPane.setContentPane(panel2);
        } else {
            rootPane.setContentPane(panel1);
        }
        showingPanel = !showingPanel;
    }
});

rootPaneおよびコンポーネントをウィンドウに追加し、switchButtonクリックswitchButtonするとパネルが切り替わります。

これがチュートリアルです。あなたは主に気にする必要がありますJRootPane.setContentPane、チュートリアルの他のものは関係ありません。

于 2012-09-11T14:54:58.823 に答える
-1

私が見つけた最良の答えは、1 つの JFrame のみを作成し、1 つの大きな JPanel に 2 つの JPanel を含めて (JPanelLeft にはボタンが含まれ、JPanelRight にはボタンの動作が含まれます)、各 JButton のメイン JPanel をコピーするというものです。任意のボタンを押すと、(JFrame.getContentPane.removeAll) を実行して古い JPanel を削除し、次に (JFrame.getContentPane.Add(NewJPanel)) を実行します。

これは私にとってはうまくいき、私が望むように私のデザインを維持します。すべての体に感謝します。

于 2012-09-12T13:12:28.600 に答える