#java #swing #intellij-idea
#java #swing #intellij-идея
Вопрос:
Я использую intellij с swing.
Мое приложение работает на разных компьютерах с разными мониторами.
Я хочу отображать свою форму в разных размерах.
У меня есть JPanel (не основной . для внутренней jpanel установлено значение (-1 670) в графическом редакторе intellij.
И я пытаюсь изменить это с помощью этого кода :
MyFormUI myform = new MyFormUI();
if (thisIsTheCase){
myform.setLongView()
}
и в MyFormUI ->
public void setLongView(){
myPanel.setPrefferedSize(new Dimension(-1, 1000))
myPanel.repaint() ;
revalidate();
// I tried also repaint and revalidate on a higher jpanel in the hierarchy
}
Когда я изменяю его в редакторе графического интерфейса — это меняется, но не с помощью кода.
есть предложения?
Комментарии:
1. Это одна из основных причин, по которой производственное Swing-приложение должно кодироваться напрямую, а не с использованием GUI Builder.
2. вот почему я оставил комментарий вместо ответа на эту проблему. В долгосрочной перспективе вам следует подумать о его замене, если для этого потребуется дальнейшее обслуживание.
Ответ №1:
myPanel.setPrefferedSize(new Dimension(-1, 1000))
myPanel.repaint();
revalidate();
Не уверен, что делает значение -1.
Код должен быть:
myPanel.revalidate();
myPanel.repaint();
Revalidate() фактически переделывает макет компонента, а перерисовка просто рисует его. В вашем коде вы перерисовываете перед повторным использованием макета.
Ответ №2:
Предпочтительный размер, как вы можете догадаться, является только предпочтительным. Если базовый менеджер компоновки не хочет использовать этот параметр, его можно отменить. IntelliJ IDEA использует свой собственный менеджер компоновки, поэтому вам нужно проверить, допускают ли политики изменения размера панелей по горизонтали и вертикали.
Диагностировать проблему будет проще, если вы опишете свой макет более подробно.