java paintComponent重写以在面板上绘制
这是一个很难回答的问题。 我们在课堂上学习小程序,我自己也在尝试一些东西
下面是代码
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);
}
}
我无法理解其中的区别。为什么相同的代码在本例中有效,而在前一例中无效
多谢各位
# 1 楼答案
在
controls
类中重写public Dimension getPreferredSize()
(并返回一个new Dimension
)。将组件放入WEST
时,宽度将由preferredSize确定。如果不重写getPreferredSize
,首选大小将为0。计算完WEST
后,CENTER
将占用剩余的空间。第二种情况之所以有效,是因为它位于默认BorderLayout
的CENTER
中