我爲一個JFrame包含兩個JPanel(右側的JPanel1和左側的JPanel2)設計了一個歡迎屏幕界面。左側的按鈕用於在JPanel1中切換面板。我想按下一個按鈕來替換另一個JPanel的JPanel1內容,但我不知道如何。請幫忙。如何用Java中的另一個JPanel替換兩個JPanel中的一個?
回答
最好的答案是,我發現我只能創建一個JFrame的,並會作出一個大的JPanel包括兩個JPanels(JPanelLeft包括按鈕和JPanelRight包括按鈕做什麼),那麼我會複製主要的JPanel的每個JButton。 當我按下任意鍵我會做(JFrame.getContentPane.removeAll)以刪除舊的JPanel然後(JFrame.getContentPane.Add(NewJPanel)。
這對我的作品,並讓我的設計,我想。謝謝
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
會切換出面板。
這是tutorial。您應該主要關注JRootPane.setContentPane
,本教程中的其他內容不相關。
謝謝,但是這個代碼將如何用新的代碼替換正確的JPanle。我不想將所有Jframe包含在一個面板中。 –
用JRootPane直接替換右邊的'JPanel'。在你調用'add(rightPanel)'的地方,調用'add(rootPane)',然後在JRootPane而不是'JFrame'上調用'setContentPane(rightPanel)'。當你想切換時,用新面板調用'setContentPane'。 – Brian
你爲什麼要創建一個JRootPane? JFrame(以及JWindow和JDialog和JInetrnalFrame)已經安裝了JRootPane?這只是增加了絨毛和混亂... – MadProgrammer
這是一個非常簡單的例子,它應該近似於您的描述。在左側,我們有一個擁抱按鈕來切換右側面板的內容。在右側,你有一個具有給定邊界和標籤的面板。當您按下按鈕時,右側的內容與另一個面板交換。
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();
}
});
}
}
在線程「AWT-EventQueue-0」中的異常java.lang.IllegalArgumentException:無法添加到佈局:約束必須是一個字符串... –
@ AbdEl-RahmanEl-Tamawy我的不好,在JVM7之前的版本中,您必須提供使用CardLayout將組件添加到容器時的「字符串」約束。您可以將任何字符串作爲'add'方法的第二個參數傳遞,只要您確保它們對於包含的所有組件都是不同的。 –
@ AbdEl-RahmanEl-Tamawy我添加了兩個'String'「constraints」,以便它可以在所有Java版本中使用 –
- 1. 用另一個jpanel替換一個jpanel
- 2. 如何用同一位置的另一個JPanel替換一個JPanel?
- 3. 另一個JPanel中的JPanel中的JButton
- 4. 如何在程序運行時將另一個JPanel替換爲另一個JPanel
- 5. 如何在另一個JPanel的中心添加一個JPanel?
- 6. 如何用另一個替換一個JPanel?
- 7. 將JPanel添加到另一個類中的另一個JPanel
- 8. 將JPanel從另一個類中調用到另一個JPanel
- 9. 另一個JPanel中的JPanel:Swing
- 10. 將Java JPanel動態添加到Java中的另一個JPanel Swing
- 11. 將Jpanel定位到另一個Jpanel中
- 12. 將JPanel從一個類添加到另一個類中的JPanel
- 13. 的JPanel不內的另一個的JPanel
- 14. 如何在同一個項目中使用另一個類的另一個JPanel來更新一個JPanel?
- 15. 如何從JFrame中刪除一個JPanel並用另一個替換它
- 16. 加載包含另一個JPanel的JPanel
- 17. 訪問另一個JPanel內的JPanel
- 18. 如何訪問一個JPanel組件到另一個JPanel
- 19. ActionListener從Jpanel調用另一個Jpanel
- 20. 從另一個JPanel調用JPanel
- 21. 點擊按鈕時如何將Jpanel替換爲jframe上的另一個jpanel
- 22. 使用另一個JPanel的JPanel創建一個彈出窗口
- 23. 如何在另一個JPanel中添加隨機座標的JPanel?
- 24. 如何在JDialog的JPanel中添加MapView以及另一個JPanel
- 25. JFrame中的兩個JPanel,其他一個
- 26. 從另一個JPanel
- 27. 另一個JPanel內
- 28. 如何將jpanel移動到同一個jframe中的另一個jpanel
- 29. 在一個JFrame中使用兩個JPanel
- 30. 將當前的JScrollPane替換爲JPanel中的另一個JScrollPane
發佈你到目前爲止的代碼,一個簡單的解決方案是在你的JPanel1上使用'CardLayout',當你按下按鈕時,你可以調用'CardLayout.next()'。 –
不想使用CardLayout,因爲當前的設計對客戶來說更好,關於代碼,我使用了Netbeans進行拖放操作。界面被分成兩個JPanel左邊的按鈕,我希望按鈕的效果發生變化右邊的JPanel與另外一個。 –
也許是一個愚蠢的問題,但會聲明一個變量JPanel JPanelOnLeft並更改其值的工作?例如。您可以將JPanelOnLeft初始化爲JPanelOnLeftInitializationValue,然後在用戶單擊按鈕以替換該面板的內容時,將JPanelOnLeft設置爲JPanelOnLeftContainingUserRequestedContent。 –