簡體   English   中英

嘗試使用paintComponent畫一個圓

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM