[英]Resize JPanel from JFrame
我想使用 Netbeans 在 Java 中創建一個小游戲。 現在我有一個 JFrame 和兩個 JPanel。
JFrame 包含 JPanel 和一個按鈕。 我的意圖是單擊此按鈕並調整其中一個 JPanel 的大小(從 0 到 >0 寬度)。
直到現在我設法調整框架的大小,但我不知道如何調整 JPanel 的大小。
這是我到目前為止所做的:
Structure
frame
|_ panel 1
|_ panel 2
|_ button
__________________
| _ _ |
| | | | | _|
| | | | | | |
| | | | | |>|
| | | | | |_|
| |_| |_| |
|__________________|
on click should expand frame and panel
______________________
| _ _____ |
| | | | | _|
| | | | | | |
| | | | | |>| ->
| | | | | |_|
| |_| |_____| |
|______________________|
這是要調整大小的 JPanel
public class ToResize extends javax.swing.JPanel {
...
public void resize(int width) {
this.setSize(new Dimension(this.getWidth() + width, this.getHeight()));
}
}
這是帶按鈕的 JFrame
public class MyFrame extends javax.swing.JFrame {
...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if (panelToResize.getWidth() == 0) {
panelToResize.resize(100);
} else {
panelToResize.resize(-100);
}
validate();
}
}
1)如果你也要調整 JFrame 的大小,那么你必須打電話
a/ setPrefferedSize(getPrefferedSize()+-)
for JFrame.pack();
b/ setPrefferedSize(getPrefferedSize()+-)
用於panelToResize
然后調用JFrame.pack();
2/如果你只改變JPanels
和JFrame
之間的大小,那么你必須調用revalidate()
加上repaint()
到panelToResize
,
3/ 但一切都取決於使用的LayoutManager
我的意圖是單擊此按鈕並調整其中一個 JPanel 的大小(從 0 到 >0 寬度)。
使用CardLayout
或JSplitPane
,或調用panel.setVisible(boolean)
。
我會以不同的方式做同樣的事情。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
panelToResize.setVisible(!panelToResize.isVisible());
if(panelToResize.isVisible()) {
jButton1.setText("<<");
} else {
jButton1.setText(">>");
}
}
為什么?
1 - 隱藏面板仍然像可見面板一樣工作。
2 - 需要知道面板是否擴展? panelToResize.isVisible();
3 - JFrame 上的布局仍按預期工作。
將setSize()
更改為setPreferredSize()
您可以使用:
mainPanel.setResizeHorizontal(true);
mainPanel.setResizeVertical(true)
你的問題就會得到解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.