2011-12-18 2 views
0

Я использовал следующий код, чтобы добавить ярлык в java-апплет. Эти линии находятся внутри краски (графика г) метод:Добавление Jlabel в java applet

ImageIcon icon = new ImageIcon(s); 
JLabel myLabel = new JLabel(icon); 
add(myLabel); 

Когда я звоню добавить (MyLabel), экран очищается и все, что я нарисовал, прежде чем ушел. Почему?

+0

Какая макет используется? – Kowser

+0

Макет freeDesign – user1077980

+0

Должен ли я использовать другой тип макета? – user1077980

ответ

4

эти линии находятся внутри краски (Graphics г) метод:

Вы никогда не должны добавлять компонент к GUI в методе краска().

Кроме того, если вам нужно сделать обычную роспись, вы должны переопределить paintComponent() not paint().

Предлагаю вам прочитать Swing tutorial. Есть раздел на:

  1. Как использовать этикетки
  2. Выполнение на заказ Картина

, которые могут помочь вам.

Существует также секция на Using Layout Managers. Я не знаю, что такое Free Design, но я сомневаюсь, что вы должны использовать его.

+0

+1 Free Design about GroupLayout – mKorbel

+0

+1 для использования метода 'paintComponent'' '' '' '' ' – GETah

+0

*" Также, если вам нужно сделать обычную покраску, вы должны переопределить paintComponent() not paint(). "Но сначала OP должен использовать класс (т. е. не 'Applet' ** или **' JApplet'), который * имеет * метод paintComponent() '! –

0

Просто чтобы добавить к чему @camickr сказал.

Никогда не добавляйте компоненты по методу paint. Каждый раз, когда компонент окрашен, следующий код выполняется

ImageIcon icon = new ImageIcon(s); 
JLabel myLabel = new JLabel(icon); 
add(myLabel); 

Таким образом, вы 100% уверены, что вы будете запускать из памяти в каком-то момент, как вы добавляете новый JLabel каждый раз, когда компонент окрашен. Вы должны добавить метку при создании родительского компонента. Если вы хотите иметь анимацию в своем приложении, я предлагаю вам загрузить эти изображения и поместить их внутри List, к которому вы можете получить доступ с помощью метода paintComponent.

List<JLabel> images = new ArrayList<JLabel>(); 
// populate images when the application needs them... 
// ... 
@Override 
public void paintComponent(Graphics g){ 
    // get the image your want to draw 
    JLabel imageToDraw = images.get(imageIndex); 
} 
Смежные вопросы