从JFrame调整JPanel的大小

9

我想在Netbeans中使用Java创建一个小游戏。目前我有一个JFrame和两个JPanels。
JFrame包含两个JPanels和一个按钮。我的意图是点击此按钮并调整其中一个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();
    }
}
5个回答

5

1) 如果您要同时调整JFrame的大小,则需要调用

a/ JFrame.pack();之前调用setPreferredSize(getPrefferedSize()+-)

b/ 调用setPreferredSize(getPrefferedSize()+-) 以调整panelToResize的大小,然后再调用JFrame.pack();

2/ 如果您只更改JPanel和JFrame之间的大小,则JFrame的大小保持不变,此时您需要对panelToResize调用revalidate()加上repaint()

3/ 但是这一切都取决于所使用的LayoutManager


1
我的意图是点击此按钮并调整一个JPanel的大小(从0到> 0宽度)。
使用CardLayout,或JSplitPane,或调用panel.setVisible(boolean)。

最终看起来像是“可停靠面板”+1。 - mKorbel

0

我会用不同的方式做同样的事情。

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上的布局仍按预期工作。


0

setSize()更改为setPreferredSize()


-2

你可以直接使用:

mainPanel.setResizeHorizontal(true);
mainPanel.setResizeVertical(true)

你的问题将会被解决。


1
请整理一下这个答案;良好的语法和英语是有用的,使用提供的格式工具也很重要——特别是您应该引用为什么这样做能解决问题。 - Nathaniel Ford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接