2016-03-25 2 views
-2
public class Game extends JFrame implements ActionListener{ 

Drawing object=new Drawing(); 
Timer t=new Timer(1,this); 
int score; 
ArrayList<Enemy> bombs=new ArrayList<Enemy>(); 

public Game() 
{ 
    t.start(); 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(700,600); 
    setVisible(true); 
    add(object); 
    add(new JLabel("Hello")); 
    validate(); 
    createBombs(); 
} 

Почему я не могу добавить JLabel и Object. Появляется только один из них. (JLabel).Добавление нескольких объектов

+0

Какая ошибка вы получаете? Можно ли увидеть функцию добавления? –

+0

Что это за объект? Вы могли показать это на любом другом контроле? Мое лучшее предположение заключается в том, что Drawing добавляется без каких-либо проблем, но что это просто не нарисовать что-то, поэтому кажется, что он не был добавлен. –

+0

Знаете ли вы, что такое менеджер компоновки по умолчанию для JFrame? – FredK

ответ

2

JFrame имеет BorderLayout по умолчанию. В BorderLayoutadd метод добавления данного компонента в положение CENTER.

Итак:

add(object); 
add(new JLabel("Hello")); 

с этими линиями вы добавляете оба элемента в CENTER положения. Например, если вы добавите метку в позицию SOUTH, ваш вид будет отображаться object.

add(object); 
add(new JLabel("Hello"), BorderLayout.SOUTH); 

Edit:

Как @camickr сказал, вы должны вызвать setVisible(true) после добавления всех компонентов. Посмотрите на код ниже.

public class Game extends JFrame implements ActionListener { 

    Drawing object = new Drawing(); 
    Timer t = new Timer(1, this); 
    int score; 
    ArrayList<Enemy> bombs = new ArrayList<Enemy>(); 

    public Game() { 
     t.start(); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(700, 600); 
     add(object); 
     add(new JLabel("Hello")); 
     validate(); 
     createBombs(); 

     setVisible(true); 
    } 
} 
+0

Большое спасибо. Я тоже попробовал, но также добавил BorderLayout.NORTH к моему объекту, которого у меня не было. –

+1

(1+). @ Dr.Satti, это правильное решение, хотя вы должны использовать BorderLayout.PAGE_END. Тем не менее, вы также должны добавлять компоненты в рамку, прежде чем сделать рамку видимой. – camickr

+0

Нет необходимости в validate(). Снова базовый код должен быть frame.add (...), frame.pack(), frame.setVisible (true). – camickr

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