Как динамически изменять размер JFrame - PullRequest
0 голосов
/ 10 октября 2011

У меня есть простая программа для рисования, я установил размер Jframe с помощью следующего кода:

    frame.setSize(900, 700);

Однако, когда пользователь изменяет размер окна, белая область для рисования все еще остается той же величины, поэтому пользователь не может рисовать, даже если он увеличит окно.

http://forum.codecall.net/java-tutorials/31180-java-mini-paint-program.html это то, с чего я начинаю. Я расширил класс «PadDraw» и записал туда большую часть своего кода, в другом своем Java-файле я только создаю фрейм, затем я создаю объект «PadDraw», я создал контейнер и затем добавил объект в контейнер фрейма: content. добавить (drawPad, BorderLayout.CENTER);

Я изменил свой код:

public class PadDraw extends JComponent implements ActionListener, ItemListener, ComponentListener{
    public synchronized void addComponentListener(ComponentListener l) {};

. , , .

И я добавил нереализованные методы, а "componentResized":

public void componentResized(ComponentEvent arg0) {
    System.out.println("Changed ????");

}

Но когда я изменил размер окна, ничего не произошло.

Одна мысль: когда я добавил componentlistener в другой мой файл вместо drawPad, метод componentResized отмечает, но поскольку я создал объект drawPad до того, как это событие произошло, я не могу изменить размер = /

Спасибо

1 Ответ

2 голосов
/ 10 октября 2011

Надеюсь, вы рисуете не прямо на JFrame, а на JPanel или JComponent, который был добавлен в панель содержимого JFrame. Если он был добавлен BorderLayout.CENTER, то он должен расширяться и сжиматься, когда JFrame расширяется и сжимается. Все становится немного сложнее, если вы рисуете на BufferedImage, так как вам придется использовать ComponentListener, чтобы увидеть, когда компонент, содержащий BufferedImage, изменит размер, а когда это произойдет, изменить размер BufferedImage без потери чертежа, который уже там.

Если этот ответ недостаточно полезен, рассмотрите возможность предоставления нам более конкретной информации о вашей текущей проблеме и текущей программе.

В программе, на которую вы ссылаетесь, вы рисуете объект Image, размер которого устанавливается при первом вызове краски. Вам нужно добавить ComponentListener к объекту PadDraw в его собственном конструкторе, а в методе ComponentListener componentResized изменить размер изображения, используя новые высоту и ширину PadDraw. , Однако я сделал бы это только в том случае, если новый размер больше старого. Затем вы также захотите перерисовать старое изображение на новом, прежде чем устанавливать переменную изображения = для нового изображения. Затем позвоните перекрасить.

...