簡體   English   中英

從 JFrame 調整 JPanel 的大小

[英]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/如果你只改變JPanelsJFrame之間的大小,那么你必須調用revalidate()加上repaint()panelToResize

3/ 但一切都取決於使用的LayoutManager

我的意圖是單擊此按鈕並調整其中一個 JPanel 的大小(從 0 到 >0 寬度)。

使用CardLayoutJSplitPane ,或調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM