Java JPanel и перетаскивание границ JFrame - PullRequest
0 голосов
/ 18 сентября 2018

Я открываю окно со следующим:

JFrame clientFrame = new JFrame("Frame");
clientFrame.setLayout(new BorderLayout());
final JPanel client_panel = new JPanel();
client_panel.setLayout(new BorderLayout());
client_panel.add(new Applet());
client_panel.setPreferredSize(new Dimension(765, 555));
clientFrame.getContentPane().add(client_panel, "Center");
clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clientFrame.pack();
clientFrame.setVisible(true);

на кадре случайное изображение.

По умолчанию, когда вы перетаскиваете нижнюю границу вверх, она естественным образом удаляетсяот изображения снизу изображения.

То же самое, если перетащить верхнюю границу вниз, оно снова будет постепенно удаляться из нижней части изображения.

Как мне поменять его таквместо этого он удаляет форму сверху, а не снизу?

1 Ответ

0 голосов
/ 18 сентября 2018
clientFrame.getContentPane().add(client_panel, "Center");

Не используйте магические значения.Люди не знают, откуда появляется «Центр».Используйте переменные, предоставляемые API:

clientFrame.getContentPane().add(client_panel, BorderLayout.CENTER);

То, что вы спрашиваете, невозможно с любым известным мне менеджером макета.Проблема в том, что диспетчер макетов знает только о размере, доступном для компонента.Он не знает, почему размер изменился (т. Е. Перетащите вверх или вниз).Таким образом, менеджер компоновки может определять правила только на основе доступного пространства.

В качестве простого теста используйте JPanel с BorderLayout.Затем создайте JLabel, содержащий ImageIcon.Добавьте метку на эту панель, а затем добавьте панель на панель содержимого фрейма.

Если вы добавите метку в BorderLayout.CENTER, тогда изображение будет отцентрировано в доступном пространстве, и вы потеряете частьверх и низ.

Если вы добавите метку в BorderLayout.PAGE_START, тогда всегда будет взят пробел (или дан) нижней части компонента.

Если вы добавите метку вBorderLayout.PAGE_END, тогда пробел всегда берется (или задается) сверху компонента.

Если вы хотите учесть перетаскивание кадра вверх или вниз, тогда решение становится намного сложнее, потому что вы будетенеобходимо добавить ComponentListener к кадру и обработать методы componentResized и componentMoved.Затем вам нужно будет отслеживать предыдущее состояние фрейма, а затем определить, какие свойства были изменены, а затем вам нужно будет выполнить пользовательское рисование изображения на основе изменений свойств, или вам нужно будет написать собственный менеджер макета, который знает освойство меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...