2016-09-23 3 views
0

Если у меня есть слушатель, который динамически добавляет JLabel, есть ли способ заставить компонент появиться сразу?Как заставить Jcomponent появиться на Java?

Я работаю над проектом, у которого есть ArrayList, хранящий каждую динамически добавленную метку. У меня есть другой метод, который включает в себя рисование строки на панели. Это зависит от нового местоположения JLabel (x и y). Вот код внутри моего слушателя:

panel.add(labelArrayList.get(index)); 
panel.repaint(); 
panel.revalidate(); 

drawLine(); 

где DrawLine() представляет собой метод, который просто рисует одну строку на панели.

private void drawLine(){ 
    /*Draw from (x1,y1) to (x2,y2), where (x1,y1) is fixed at original and (x2,y2) is the location of the newly added JLabel*/ 
    graphics2d.drawLine(x1, y1, x2, y2); 
} 

Когда я был в режиме отладки, я увидел, что элемент не добавляется после перекраски() и перепроверить() называется. Поэтому я не могу получить местоположение недавно добавленной метки. Новый JLabel появляется после вызова метода drawLines().

Я хочу добавить новую метку до вызова drawLine(). Есть ли способ заставить его работать?

+1

Этот код находится в слушателе? Честно говоря, прямолинейно нарисовать линию в слушателе, если честно, такие вещи обычно бывают в методе paintComponent(). Ваша основная проблема может быть более связана с тем, что вы не делаете что-то вроде Swing. – Gimby

ответ

0

Вызов doLayout() (вместо repaint() или revalidate()) сделаю.

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