Переопределение paintComponent для рисования на панели

1

Это вопрос о нобе. Нас изучают апплеты в классе, и я что-то пробовал самостоятельно.

Ниже приведен код

import java.awt.*;
import javax.swing.*;


class controls extends JPanel{

@Override public void paintComponent(Graphics g) {
    g.drawOval(50, 50, 50, 50); // <-- draws an oval on the panel
}

}

 public class test extends JApplet{
public void init(){
    final JPanel stage = new JPanel();
    final JPanel controlPanel = new controls();
    final JPanel banner = new JPanel();
    final JLabel name = new JLabel("Test", JLabel.CENTER);
    this.setLayout(new BorderLayout());
    banner.setBackground(Color.CYAN);
    banner.add(name);
    this.add(controlPanel, BorderLayout.WEST);
    this.add(banner, BorderLayout.NORTH);
}
}

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

Я имею в виду, что работает следующий код.

public class test extends JApplet{
public void init(){
    JPanel controlPanel = new controls();
    this.add(controlPanel);
}
}

Я не могу понять разницу. Почему же этот код работает в этом случае, а не в предыдущем?

Спасибо.

  • 0
    Я не уверен, что следую. Какой код работает, а какой нет? Что происходит, когда вы запускаете код, который не работает?
  • 0
    @MichaelMyers: код без макета работает. На панели с макетом отображается панель баннера, но не панель управления, объект которой я создал в тестовом классе.
Теги:
swing
applet
japplet

1 ответ

4
Лучший ответ

Переопределите public Dimension getPreferredSize() (и верните new Dimension) в классе controls. При размещении компонентов в WEST ширина будет определяться предпочтительнымSize. Если вы не переопределите getPreferredSize, предпочтительный размер будет равен 0. CENTER займет оставшуюся часть пространства, после вычисления getPreferredSize WEST. Второй случай работает, потому что он находится в CENTER по умолчанию BorderLayout

  • 0
    Я добавил public Dimension getPreferredSize(){ return new Dimension(50,50); } в классе элементов управления. Но это все еще не делает панель. Я делаю что-то неправильно?
  • 0
    Попробуйте с 100 . Не могу понять, почему 50 не будет работать
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню