Подтвердить что ты не робот

Установка минимального размера для окна в java swing

У меня есть JFrame, у которого 3 JPanels в GridBagLayout..

Теперь, когда я минимизирую окна, после определенного предела, третий JPanel имеет тенденцию исчезать. Я попытался установить минимальный размер JFrame, используя setMinimumSize (новый размер (int, int)), но не добился успеха. Окна все еще могут быть сведены к минимуму.

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

Как я могу это сделать?

Код: -

import java.awt.Dimension;

import javax.swing.JFrame;

public class JFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(400, 400));
        frame.setVisible(true);
    }
}

также:

[email protected]:~/java$ java --showversion
java version "1.5.0"
gij (GNU libgcj) version 4.4.1

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Usage: gij [OPTION] ... CLASS [ARGS] ...
          to invoke CLASS.main, or
       gij -jar [OPTION] ... JARFILE [ARGS] ...
          to execute a jar file
Try `gij --help' for more information.
[email protected]:~/java$

Дает мне вывод, например

alt text

** ОБНОВЛЕНИЕ: ** То же самое происходит при запуске, хотя NetBeans IDE дает ожидаемый результат. Когда я запускаю компилятор java JFrameExample, у меня возникают проблемы. Теперь, что это значит?

4b9b3361

Ответ 1

Документация сообщает мне, что это поведение зависит от платформы. Особенно, поскольку следующий код кода работает для меня по желанию в Windows Vista:

import java.awt.Dimension;

import javax.swing.JFrame;

public class JFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(100, 100));
        frame.setVisible(true);
    }
}

Ответ 2

Фактически есть способ обеспечить минимальный размер на любой платформе. Вам нужно установить минимальный размер JFrame на минимальный размер его области содержимого, а затем вам нужно написать ComponentAdapter и переопределить компонентResized. Затем вы просто используете размер getSize и getMinimum на вашем JFrame и подставляете ширину и/или высоту с минимальной шириной или высотой, если она больше. Предполагая, что вы расширяете JFrame:

this.addComponentListener(new ComponentAdapter(){
        public void componentResized(ComponentEvent e){
            Dimension d=YourJFrame.this.getSize();
            Dimension minD=YourJFrame.this.getMinimumSize();
            if(d.width<minD.width)
                d.width=minD.width;
            if(d.height<minD.height)
                d.height=minD.height;
            YourJFrame.this.setSize(d);
        }
    });