MigLayout: при попытке полноэкранного отображения отображается только окно - PullRequest
2 голосов
/ 25 октября 2011

Вот код:

ScreenHeight = Toolkit.getDefaultToolkit().getScreenSize().height,
ScreenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;

JFrame MainFrame = new JFrame();
MainFrame.setSize(ScreenWidth, ScreenHeight);
MainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
MainFrame.setVisible(true);

/* When set to false, all buttons and boxes are displayed, 
   otherwise only the main window appears */ 
MainFrame.setUndecorated(true); 

Container Pane = Frame.getContentPane();
Pane.setLayout(new MigLayout());
initLoginPanel(Pane); 

Функция, которая размещает элементы управления:

private void initLoginPanel(Container Obj) 
{
    JPanel LoginContainer = new JPanel();
    LoginContainer.setLayout(new MigLayout());

    Obj.add(LoginContainer, "pos 0.5al 0.5al");

    JLabel  uNameLabel = new JLabel("Username");
    JTextField uNameBox = new JTextField();

    JLabel uPassLabel = new JLabel("Password");
    JTextField uPassBox = new JTextField();

    JButton LoginButton = new JButton("Login", 90, 26);
    LoginContainer.add(uNameLabel, "wrap");
    LoginContainer.add(uNameBox, "span");
    LoginContainer.add(uPassLabel, "wrap");
    LoginContainer.add(uPassBox, "span");
    LoginContainer.add(LoginButton, "");
}

Если в приведенном выше коде используется MainFrame.setUndecorated(false), он работает нормально, но не в полноэкранном режиме. То есть в строке заголовка отображаются кнопки «Закрыть», «Свернуть» и «Развернуть».

Вопрос: 1. Как заставить компоненты работать в полноэкранном режиме.

1 Ответ

1 голос
/ 25 октября 2011

Есть две проблемы:

  1. Позиция setVisible
    Показ кадра должен быть последний шаг ;сначала вы должны настроить свой фрейм и добавить его содержание.
  2. вызов initLoginPanel
    Ваш кодделать неправильные вещи.Почему бы вам не добавить компоненты непосредственно в кадр?т.е.

    initLoginPanel( YourJFrame );
    

Фиксированный, упрощенный код:

JFrame frame = new JFrame("Main window");

frame.setSize( Toolkit.getDefaultToolkit().getScreenSize() );
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(false);

initLoginPanel(frame);

frame.setVisible(true); //FINALLY show the JFrame!
...