2012-02-27 26 views
5

Chcę ustawić maksymalny rozmiar ramki JFrame podczas uruchamiania aplikacji. Problem polega na tym, że jeśli rozdzielczość ekranu jest większa, moja ramka się powiększa, ale w tym czasie nie powinna przekraczać zdefiniowanego maksymalnego zakresu, ale ten sam przypadek działa dobrze z niską rozdzielczością.Ustawianie maksymalnego rozmiaru ramki JFrame podczas uruchamiania aplikacji

Jakbym chciał moja rama się od maksymalnej (500,500), więc napisałem ten kawałek kodu:

JFrame frame = new JFrame("FRAME TRANSPARENT"); 
frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50), (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-150)); 
frame.setMaximizedBounds(new Rectangle(0,0 , 500, 500)); 
frame.setVisible(true); 

Nawet ustawić związana, JFrame rozważa metody setSize i wydaje się być że lekceważy metodę setMaximizedBounds. Próbowałem już z metodą setMaximumized, ale otrzymałem to samo wyjście.

+1

Dlaczego 'setMaximizedBounds' zamiast' setMaximumSize'? – wchargin

Odpowiedz

6

Próbowałem ją i jesteś tak dobrze, że setMaximumSize() nie działa .. te wszystkie lata nie mógł poznać, że !!! Głównie moje wymagania wielkości granicznej jest ustalona przez setResizable(false), choć widzę, że mają konkretne zapytanie minimalnych i maksymalnych rozmiarach, aby być inna

pracował nad rozwiązaniem dla Ciebie jeśli:

public class MaxSizeUI 
{ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new MaxSizeUI().makeUI(); 
      } 
     }); 
    } 

    public void makeUI() { 
     final JFrame frame = new JFrame("Sample Fram") { 

      @Override 
      public void paint(Graphics g) { 
       Dimension d = getSize(); 
       Dimension m = getMaximumSize(); 
       boolean resize = d.width > m.width || d.height > m.height; 
       d.width = Math.min(m.width, d.width); 
       d.height = Math.min(m.height, d.height); 
       if (resize) { 
        Point p = getLocation(); 
        setVisible(false); 
        setSize(d); 
        setLocation(p); 
        setVisible(true); 
       } 
       super.paint(g); 
      } 
     }; 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 150); 
     frame.setMaximumSize(new Dimension(400, 200)); 
     frame.setMinimumSize(new Dimension(200, 100)); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Powoduje migotanie ramki na ekranie, gdy osiągnie maksymalną szerokość lub wysokość. W niektórych przypadkach dostaje się w nieskończoną pętlę ukrywającą się i odtwarzającą. –

0

użycie wymiar
Dimension d=getMaximumSize(); Frame.setSize(d.width, d.height);

2

Jeden możliwych rozwiązań jest:

Dimension DimMax = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setMaximumSize(DimMax); 

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
Powiązane problemy