#java #swing #jframe #resize #resizable
#java #swing #jframe #изменение размера #изменяемый размер
Вопрос:
Так что я сталкивался с этой проблемой довольно много раз, и мне еще предстоит выяснить или найти решение. У меня есть JFrame
приложение, которое имеет возможность переключать изменение размера. Однако для того, что я хочу, я хочу, чтобы размеры оставались точно такими же, но когда я setResizable(false);
JFrame
изменяю размер. Почему он это делает и как мне остановить это?
Вот пример:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ResizeSample extends JFrame{
public ResizeSample() {
super("Resize Sample");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
setLocation(1930, 10);
JButton toggle = new JButton("Toggle Resize");
toggle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setResizable(!isResizable());
}
});
add(toggle, BorderLayout.NORTH);
pack();
setVisible(true);
}
public static void main(String[] args) {
new ResizeSample();
}
}
Редактировать
Я также забыл упомянуть, что когда я меняю ActionListener
код на:
toggle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Before: " getSize());
setResizable(!isResizable());
System.out.println("After: " getSize());
System.out.println();
}
});
чтобы проверить изменение размера, оно не идентифицирует изменение, но оно четко видно при запуске программы.
Комментарии:
1. Какой у него размер после вызова
setResizable(false)
? Я могу себе представить, что размер будет установлен на значение, возвращаемоеgetPreferredSize()
, но это всего лишь предположение.2. @Axel, звонивший
setPreferredSize()
до и после звонкаsetResizable(false)
, говорит, что размер тот же, но визуально видно, что что-то изменилось.3. Что вы получаете , звоня
getSize()
до и после звонкаsetResizable(false)
? Что произойдет, если вы выполните asetPreferredSize(null)
перед вызовомsetResizable(false)
?4. Какой L amp; F? Нет изменения размера в Mac OS X, что также перемещает
Window
изображение в верхний правый угол моего (меньшего размера и смещенного по вертикали) экрана. Смотрите также Начальные потоки .5. Я использую Windows 10
getSystemLookAndFeelClassName()
. Когда я тестировал его на одном из компьютеров моей школы, который работает под управлением Mac OS X, и я тоже не помню, чтобы видел проблему. Означает ли это, что это относится только к Windows? И если да, то есть ли какой-нибудь способ это исправить?