2013-11-08 2 views
0

Я работаю над онлайн-режимом для новой игры, и для предотвращения мошенничества мне нужны размеры окон для исправления (и для обоих игроков требуется окно с одинаковыми размерами).JFrame.setResizable (false); не работает

Я использовал 'jframe.setResizable (false);' но, похоже, это «глючный».

Когда я нажимаю на окно и отворачиваю его от границы экрана, Windows сводит к минимуму его.

Вот видео об этом: http://www.youtube.com/watch?v=AQ7OHJOuLSk&feature=youtu.be

Я попытался следующий код, чтобы исправить это:

Dimension d = new Dimension(width, height); 
    panel.getJFrame().setMaximumSize(d); 
    panel.getJFrame().setMinimumSize(d); 
    panel.setMaximumSize(d); 
    panel.setMinimumSize(d); 

и я создал компонент Слушатель:

if (max_height!=-1){ 
     if (e.getComponent().getSize().getHeight()>max_height){ 
      e.getComponent().setSize((int) e.getComponent().getSize().getWidth(),max_height); 
     } 
    } 
    if (max_width!=-1){ 
     if (e.getComponent().getSize().getHeight()>max_width){ 
      e.getComponent().setSize(max_width,(int) e.getComponent().getSize().getHeight()); 
     } 

и Я пытался работать с макетами, но ничего не получилось.

Теперь мне нужна возможность предотвратить минимизацию «сбой» (если это глюк) или способ сделать JPanel не изменчивым. Как и при изменении размера окна JFrame, JPanel всегда остается неизменным. Он не растягивается и не сводится к минимуму.

Помощь очень ценится :)

С уважением Феликс

+0

Начните с предоставления подсказок размера для основной панели (а не фрейма) путем переопределения getPreferred/Minimum/MaximumSize. Установите основной макет на фрейме на что-то вроде GridBagLayout, используйте JFrame # pack для установки размера кадра – MadProgrammer

+0

Кроме того, будьте осторожны, что setResizable (false) может изменить размер кадра, см. [Здесь] (http://stackoverflow.com/ вопросы/15560527/frame-and-canvas-grow-more-than-defined/15560624 # 15560624) для получения более подробной информации – MadProgrammer

+0

Опубликуйте свой «SSCCE», который демонстрирует проблему, а не видео. – camickr

ответ

0

ли вы инициализировать переменную jframe или вы называете общий класс?

Потому что если вы делаете это так:

JFrame frame = new JFrame(); 
frame.setResizable(false); 

Он отлично работает для меня ...

2

До сих пор лучший патч для этого надоедливого вопроса заключается в следующем. Не имеет значения, где вы называете метод setResizable(false). Просто добавьте этот кусок кода после setVisible(true).

private void sizeBugPatch() { 
    while (frame.getWidth() > yourWidth) { 
     frame.pack(); 
    } 
} 

Где yourWidth является ширина вы установили в любой из возможных способов, либо вручную, либо с помощью переопределения setPreferredSize методов. Объяснение довольно просто, frame.pack(), похоже, как-то сбрасывает frame.setResizable(boolean b). Вы можете использовать if вместо цикла while, но я предпочитаю while, чтобы исключить случай, когда окно будет по-прежнему быть вне размера даже после второго pack().

Смежные вопросы