2010-09-12 27 views
11

Tôi có mã sau đây nơi tôi cố gắng đặt JLabel ở vị trí tùy chỉnh trên JFrame.Tại sao không đặtLocation() di chuyển nhãn của tôi?

public class GUI extends JFrame 
{ 

    /** 
    * 
    * @param args 
    */ 
    public static void main(String args[]) 
    { 
     new GUI(); 
    } 
    /** 
    * 
    */ 
    public GUI() 
    { 
     JLabel addLbl = new JLabel("Add: "); 
     add(addLbl); 
     addLbl.setLocation(200, 300); 
     this.setSize(400, 400); 

     // pack(); 
     setVisible(true); 
    } 
} 

Dường như nó không di chuyển đến nơi tôi muốn.

Trả lời

25

Vấn đề là LayoutManager của bảng điều khiển đang đặt vị trí của nhãn cho bạn.

Những gì bạn cần làm là thiết lập bố trí để null:

public GUI() { 
    setLayout(null); 
} 

Điều này sẽ làm cho nó để khung không cố gắng bố trí các thành phần của chính nó.

Sau đó, gọi setBounds(Rectangle) trên nhãn. Giống như vậy:

addLbl.setBounds(new Rectangle(new Point(200, 300), addLbl.getPreferredSize())); 

Điều này sẽ đặt thành phần bạn muốn.

Tuy nhiên, nếu bạn không có lý do thực sự tuyệt vời để tự mình đặt các thành phần, thì tốt hơn bạn nên sử dụng LayoutManagers để làm việc có lợi.

Here là hướng dẫn tuyệt vời để bắt đầu sử dụng LayoutManager s.

Nếu bạn phải đi mà không cần LayoutManagerhere là hướng dẫn tốt để không có ai.

+3

+1 Để cho anh ấy câu trả lời cho câu hỏi của anh ấy, nhưng hãy để anh ấy biết đó không phải là cách hay để làm mọi thứ nói chung – Chimmy

+0

@Chimmy, cảm ơn. – jjnguy

0

Bạn đặt mã vị trí dưới khung và nó sẽ hoạt động nhưng nếu bạn muốn mã hoạt động chắc chắn đặt mã vị trí trong vòng lặp chạy. Đó là những gì tôi đã làm để tìm ra và nó hoạt động.

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