2012-03-17 44 views
6

Tôi cần định vị JFrame trên màn hình của mình. Nhưng tôi không thể làm cho chúng xuất hiện ở phía bên phải của đáy màn hình.Vị trí trên màn hình bên phải

Xin vui lòng ai đó có thể giải thích cho tôi cách định vị chúng, nếu bạn có thể mô tả cách thực hiện, nó sẽ tuyệt vời.

Đây là mã cho đến thời điểm này.

//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

Một số nền tảng giới hạn điều này, như đã đề cập [ở đây] (http://stackoverflow.com/a/2188981/230513). – trashgod

Trả lời

13

Hãy thử ví dụ bên dưới. Lưu ý cách pack() "Gây ra điều này Window để có kích thước để vừa với kích thước và bố cục ưa thích của các thành phần phụ của nó."

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

Cách đơn giản nhất mà tôi biết là lồng mỗi JPanels bằng trình quản lý bố cục của riêng nó.

  • Các JPanel chính sẽ sử dụng một BorderLayout
  • Một JPanel đó sẽ được thêm vào chính ở vị trí BorderLayout.SOUTH cũng sử dụng BorderLayout.
  • thành phần cần phải đi ở góc SE được thêm vào JPanel ở trên tại vị trí BorderLayout.EAST.
  • Nói chung, bạn hầu như luôn sử dụng trình quản lý bố cục tốt hơn so với cố gắng đặt vị trí tuyệt đối của các thành phần.
+0

yeah! Tôi muốn đặt JFrame. Xin lỗi vì sự hiểu nhầm! Nhưng cảm ơn vì đã thử Pal! – Isuru

+0

Chỉ là một lời khuyên để đề cập đến 'BorderLayout.SOUTH' và' BorderLayout.EAST', khi chúng ta phải sử dụng 'BorderLayout.PAGE_END' và' BorderLayout.LINE_START' tương ứng, cho jdk 1,4+, như được giới thiệu bởi [BorderLayout Tutorials ] (http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html) :-) –

Các vấn đề liên quan