2010-05-06 4 views
24

У меня есть JFrame который имеет 3 JPanels в GridBagLayout ..Установка минимального предельного размера для окна в Java Swing

Теперь, когда я минимизировать окна, после определенного предела, третий 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

** UPDATE: ** То же самое при запуске, хотя Netbeans IDE дает ожидаемый результат. Когда я запускаю компилятор java JFrameExample, я сталкиваюсь вопросы .. Теперь, что это значит ???

+1

На какой платформе вы работаете и какую версию Java вы используете? –

+0

java 6 на ubuntu 9.10 –

+0

Знаете ли вы, какой номер обновления вашего java 6? Введите «java -version», и вы увидите что-то вроде: java-версии «1.6.0_18», 18 будет обновлением #. Возможно, есть ошибка, которая исправлена ​​только в более поздней версии java 6 –

ответ

30

documentation говорит мне, что это поведение зависит от платформы. Тем более, что следующий пример кода работает для меня, как требуется в 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); 
    } 
} 
+0

Работает и для меня (на Ubuntu 9, java 6, gnome). – aioobe

+0

Я на ubuntu 9.10, java 6, Gnome .. Это не работает для меня .. Надеюсь, вы уверены в моем вопросе. Я не хочу, чтобы мои окна были сведены к минимуму после определенного порога ... –

+0

Работает на Ubuntu 14.04, Java 7, Gnome/Unity. –

6

Там на самом деле это способ обеспечения минимального размера на любой платформе. Вам нужно установить минимальный размер 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); 
     } 
    }); 
+0

'frame.addComponentListener (новый ComponentAdapter() { \t @Override общественного недействительными componentResized (ComponentEvent е) { Размер D = frame.getSize(); Размер кадра = возражаете.getMinimumSize(); если (d.width Где кадр объявлен как член класса' частной JFrame кадр; ' [Demo Code, необходимо скачать] (https://ideone.com/i9AYBf) – Abhijeet

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