Изменить размер JPanel из JFrame - PullRequest
7 голосов
/ 12 июля 2011

Я хочу создать небольшую игру на Java с использованием Netbeans. На данный момент у меня есть JFrame и два JPanels.
JFrame содержит как JPanels, так и кнопку. Мое намерение состоит в том, чтобы нажать на эту кнопку и изменить размер одного из 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 ]

5 голосов
/ 12 июля 2011

1) если вы тоже измените размер JFrame, вам нужно позвонить

a / setPrefferedSize(getPrefferedSize()+-) для JFrame.pack();

b / setPrefferedSize(getPrefferedSize()+-) для panelToResize, а затем позвоните JFrame.pack();

2 /, если вы меняете размер только между JPanels и JFrame, размер остается неизменным, тогда вам нужно позвонить revalidate() плюс repaint() на panelToResize,

3 / но все зависит от используемого LayoutManager

1 голос
/ 13 июля 2011

Мое намерение состоит в том, чтобы нажать на эту кнопку и изменить размер одного из JPanels (от 0 до> 0 ширины).

Используйте CardLayout, или JSplitPane, или позвоните panel.setVisible(boolean).

0 голосов
/ 30 апреля 2013

Я бы сделал то же самое по-другому.

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 голосов
/ 07 марта 2013

Вы можете просто использовать:

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

и ваша проблема будет решена.

0 голосов
/ 12 июля 2011

Изменить setSize() на setPreferredSize()

...