2012-03-17 12 views
6

Ho bisogno di posizionare JFrame sul mio schermo. Ma non posso farli apparire sul lato destro dello schermo in basso.Position on Screen Right Bottom

Per favore qualcuno può spiegarmi come posizionarli, se è possibile descrivere come farlo, sarebbe fantastico.

Ecco il codice fino ad ora.

//Gets the screen size and positions the frame left bottom of the screen 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice defaultScreen = ge.getDefaultScreenDevice(); 
    Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds(); 
    int x = (int)rect.getMinX(); 
    int y = (int)rect.getMaxY()- frame.getHeight(); 
    frame.setLocation(x ,y - 45); 
+0

Alcune piattaforme limitano questo, come accennato [qui] (http://stackoverflow.com/a/2188981/230513). – trashgod

risposta

13

Provare l'esempio di seguito. Nota come pack() "Si deve dimensionare questo Window per adattarlo alle dimensioni e ai layout preferiti dei relativi sottocomponenti."

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Rectangle; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/q/9753722/230513 */ 
public class LowerRightFrame { 

    private void display() { 
     JFrame f = new JFrame("LowerRightFrame"); 
     f.add(new JPanel() { 

      @Override // placeholder for actual content 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 

     }); 
     f.pack(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice defaultScreen = ge.getDefaultScreenDevice(); 
     Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds(); 
     int x = (int) rect.getMaxX() - f.getWidth(); 
     int y = (int) rect.getMaxY() - f.getHeight(); 
     f.setLocation(x, y); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new LowerRightFrame().display(); 
      } 
     }); 
    } 
} 
3

Il modo più semplice che conosco è quello di nidificare JPanels ciascuno utilizzando il proprio gestore di layout.

  • I principali JPanel userebbero BorderLayout
  • Altri JPanel che viene aggiunto alla principale nella posizione BorderLayout.SOUTH utilizza anche BorderLayout.
  • il componente che deve andare nell'angolo SE viene aggiunto al JPanel sopra alla posizione BorderLayout.EAST.
  • In generale, è quasi sempre meglio utilizzare i gestori di layout e cercare di impostare la posizione assoluta dei componenti.
+0

sì! Voglio impostare JFrame. Scusa per l'incomprensione! Ma grazie per aver provato Pal! – Isuru

+0

Solo un consiglio per fare riferimento a 'BorderLayout.SOUTH' e' BorderLayout.EAST', quando dobbiamo usare rispettivamente 'BorderLayout.PAGE_END' e' BorderLayout.LINE_START', per jdk 1.4+, come indicato da [Esercitazioni su BorderLayout ] (http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html) :-) –