Добавление Jlabel в Java-апплет - PullRequest
0 голосов
/ 18 декабря 2011

Я использовал следующий код для добавления метки в Java-апплет. Эти строки находятся внутри метода paint (Graphics g):

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

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

Ответы [ 2 ]

4 голосов
/ 18 декабря 2011

эти строки внутри метода рисования (Графика g):

Вы НИКОГДА не должны добавлять компонент в графический интерфейс в методе paint ().

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

Я предлагаю вам прочитать учебник Swing . Есть раздел на:

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

, который может вам помочь.

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

0 голосов
/ 18 декабря 2011

Просто добавить к тому, что сказал @ 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);
}
...