Установить размер JPanel, если в нем нет компонентов
У меня есть пользовательская JPanel. Единственное, что в нем есть, это рисование прямоугольника, используя drawRect
метод Graphics
объект. JPanel всегда имеет очень определенный размер квадрата, отказывается становиться больше или меньше. Пытался переопределить getPreferredSize()
метод, не работал.
Попытался установить разные менеджеры компоновки для этой пользовательской JPanel, а также попробовал все менеджеры компоновки для JPanel, в которых размещена эта JPanel. Тем не менее, размер пользовательской JPanel остается неизменным.
Как я уже сказал, в пользовательском JPanel нет никаких компонентов, только рисунок прямоугольника.
Есть идеи?
1 ответ
Не зная больше о том, что вы пытаетесь достичь:
Что касается вашей панели, вы должны знать, какие менеджеры макета уважают предпочтительные размеры, а какие нет
Grid Flow Border Box GridBag Respect PreferredSize NO YES NO YES YES
Это, как говорится, если вы заверните нарисованный
JPanel
вJPanel
с одним из "НЕТ", окрашеннымJPanel
Шоуд растягивается с изменением размеров рамки.Также, если вы хотите, чтобы нарисованный прямоугольник растягивался вместе с его
JPanel
, то вам нужно помнить, чтобы нарисовать прямоугольник сgetWidth()
а такжеgetHeight()
изJPanel
и не используйте жестко закодированные значения.
Вот пример использования BorderLayout
в качестве макета содержащей панели, и с использованием getWidth()
а также getHeight()
при выполнении картины.
import java.awt.*;
import javax.swing.*;
public class StretchRect {
public StretchRect() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(new RectanglePanel());
JFrame frame = new JFrame();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public class RectanglePanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect( (int)(getWidth() * 0.1), (int)(getHeight() * 0.1),
(int)(getWidth() * 0.8), (int)(getHeight() * 0.8) );
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new StretchRect();
}
});
}
}