Это вопрос о нобе. Нас изучают апплеты в классе, и я что-то пробовал самостоятельно.
Ниже приведен код
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);
}
}
Я не могу понять разницу. Почему же этот код работает в этом случае, а не в предыдущем?
Спасибо.
Переопределите public Dimension getPreferredSize()
(и верните new Dimension
) в классе controls
. При размещении компонентов в WEST
ширина будет определяться предпочтительнымSize. Если вы не переопределите getPreferredSize
, предпочтительный размер будет равен 0. CENTER
займет оставшуюся часть пространства, после вычисления getPreferredSize
WEST
. Второй случай работает, потому что он находится в CENTER
по умолчанию BorderLayout
public Dimension getPreferredSize(){ return new Dimension(50,50); }
в классе элементов управления. Но это все еще не делает панель. Я делаю что-то неправильно?
100
. Не могу понять, почему 50 не будет работать