从JFrame调整JPanel的大小

时间:2011-07-12 15:20:23

标签: java swing netbeans jframe jpanel

我想用Netbeans在Java中创建一个小游戏。现在我有一个JFrame和两个JPanel JFrame包含JPanel和一个按钮。我的意图是单击此按钮并调整其中一个JPanels(从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 个答案:

答案 0 :(得分:5)

1)如果您也要调整JFrame的大小,那么您必须调用

setPrefferedSize(getPrefferedSize()+-)

的{/ 1}}

{/ 1}} JFrame.pack();,然后致电setPrefferedSize(getPrefferedSize()+-)

2 /如果您只更改panelToResizeJFrame.pack();尺寸保持不变的尺寸,那么您必须致电JPanelsJFramerevalidate()

3 /但一切都取决于使用LayoutManager

答案 1 :(得分:1)

  

我的目的是点击此按钮并调整其中一个JPanel(从0到> 0宽度)。

使用CardLayoutJSplitPane,或致电panel.setVisible(boolean)

答案 2 :(得分:0)

setSize()更改为setPreferredSize()

答案 3 :(得分: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上的布局仍然按预期工作。

答案 4 :(得分:-2)

你可以使用:

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

你的问题将得到解决。