Изменение размера JPanel из JFrame
Я хочу создать небольшую игру на Java с помощью NetBeans. На данный момент у меня есть JFrame и два JPanels.
JFrame содержит как JPanels, так и кнопку. Мое намерение состоит в том, чтобы нажать на эту кнопку и размер JPanels (от 0 до >0 ширина).
До сих пор я менял размер кадра, но я не могу понять, как изменить размер JPanel.
Вот что я сделал до сих пор:--7-->
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 ответов
1) Если вы также измените размер JFrame, то вам нужно позвонить
a/setPrefferedSize(getPrefferedSize()+-)
на JFrame.pack();
b/setPrefferedSize(getPrefferedSize()+-)
на panelToResize
а потом звоните JFrame.pack();
2/ Если вы только изменить размер между JPanels
и JFrame
размер остается, то вы должны позвонить revalidate()
плюс repaint()
до panelToResize
,
3/ но все зависит от используемого LayoutManager
мое намерение состоит в том, чтобы нажать на эту кнопку и размер JPanels (от 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 по-прежнему работает по назначению.
вы можете просто использовать:
mainPanel.setResizeHorizontal(true);
mainPanel.setResizeVertical(true)
и ваша проблема будет решена.