[英]Trying to draw a circle using paintComponent
我正在做一个作业,我在其中创建一个GUI来在其上绘制圆或面,并为用户提供了单击按钮时更改面部特征的选项,我已经完成了基本布局,但现在我想绘制一个圆在GUI的主面板中,我创建了另一个扩展JPanel
文件,并创建了paintComponent
方法,并在主应用程序上对其进行了调用,但是它不会出现一个圆形,而是会在主面板的顶部得到一个小正方形,已经尝试过大小,但是无论我进行什么更改,仍然会给我相同的东西,如果我能得到一些帮助,我将不胜感激,我将不胜感激,并提供一些建议。
这是我的JPanel主应用
public class FaceApp extends JFrame {
/**
*
*/
JPanel panel,mainPanel;
Graphics graph;
public static void main(String[] args) {
FaceApp frame = new FaceApp();
frame.setVisible(true);
frame.setBackground(Color.BLUE);
frame.setSize(1000,1000);
frame.setResizable(false);
}
private FaceApp() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Face");
panel = new JPanel(new GridLayout(16,1,1,1));
panel.setBorder(new EmptyBorder(30,30,100,100));
mainPanel = new JPanel();
JCheckBox eyes = new JCheckBox("Eyes");
JCheckBox noes = new JCheckBox("Nose");
JCheckBox mouth = new JCheckBox("Mouth");
JLabel label = new JLabel();
JButton update = new JButton("update");
label.setText("You choose..");
panel.add(label);
panel.add(eyes);
panel.add(noes);
panel.add(mouth);
panel.add(update);
Face face = new Face();
mainPanel.setBackground(Color.BLUE);
mainPanel.add(face);
add(mainPanel,BorderLayout.CENTER);
add(panel, BorderLayout.WEST);
}
}
这是进行绘画的Face
类:
public class Face extends JPanel{
/**
*
*/
public Face(){
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(20, 30, 150, 150);
g.setColor(Color.red);
}
}
mainPanel.add(face);
您正在将面部组件添加到使用FlowLayout的面板中。 FlowLayout遵守添加到其中的任何组件的首选大小。 在您的情况下,首选大小为(0,0),因此布局管理器无法正确执行其工作。
您需要重写类的getPreferredSize()
方法以返回组件的首选大小,在您的情况下,该大小可能是(190,210),因此椭圆在面板中居中。
您可以阅读Swing教程“ 自定义绘画”中的这一部分,以获取一个示例,该示例演示了如何实现此方法。 请保留本教程的链接,因为它包含许多Swing基础知识的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.