2010-09-12 3 views
11

У меня есть следующий код, где я пытаюсь разместить JLabel в произвольном месте на JFrame.Почему setLocation() не переносит мой ярлык?

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); 
    } 
} 

Он, кажется, не перемещается туда, где я хочу.

ответ

25

Проблема в том, что панель LayoutManager настраивает расположение метки для вас.

Что вам нужно сделать, это установить раскладку на нуль:

public GUI() { 
    setLayout(null); 
} 

Это сделает это так, кадр не пытается макет компонентов сам по себе.

Затем позвоните по телефону setBounds(Rectangle) на этикетке. Например:

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

Это должно разместить компонент, в котором вы хотите.

Однако, если у вас нет действительно большой повод раскладывать компоненты самостоятельно, это, как правило, лучше использовать LayoutManagers работать в вашу пользу.

Here - отличный учебник по началу работы с использованием LayoutManager.

Если вы должны пойти без LayoutManagerhere - это хороший учебник для перехода без него.

+3

+1 За то, что он дал ему ответ на свой вопрос, но сообщив ему, что это не лучший способ сделать что-то вообще – Chimmy

+0

@Chimmy, спасибо. – jjnguy

0

Вы помещаете код местоположения под фрейм, и он будет работать, но если вы хотите, чтобы он работал, обязательно введите код местоположения во время цикла. Это то, что я сделал, чтобы понять это, и это работает.

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