[英]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.