簡體   English   中英

使用drawOval()方法繪制橢圓

[英]Drawing oval using drawOval() method

首先,我編寫了如下類DrawOval.java:

public class DrawOval extends JPanel{
    private int diameter = 10;

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.fillOval(10,10,diameter,diameter);
    }
    public void setDiameter(int newD){
        diameter = (newD>=0 ? newD : 10);
        repaint();
    }
    public Dimension getPreferredSize(){
        return new Dimension(200,200);
    }
    public Dimension getMinimumSize(){
        return getPreferredSize();
    }
}

然后我按如下方式編寫此類TheWindow.java:

public class TheWindow extends JFrame{
    private DrawOval myPanel;
    public TheWindow(){
        super("The title");
        myPanel = new DrawOval();
        myPanel.setBackground(Color.GREEN);
        add(myPanel,BorderLayout.CENTER);
    }
}

最后我寫了如下的主要課程:

public class Test{
    public static void main(String[] args){
        TheWindow w = new TheWindow();
        w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        w.setSize(300,300);
        w.setVisible(true);
    }
}

並且輸出僅是具有綠色背景且沒有任何橢圓形的幀?

您永遠不會調用setDiameter(...) ,因此該字段的值為0,並且不會繪制任何橢圓形。

一種解決方案是嘗試記住每次創建DrawOval對象時都調用此方法,但是為什么要強迫自己記住這一點呢? 而是將直徑作為構造函數的參數,並確保該類沒有默認構造函數,以便在創建對象時必須將直徑字段設置為某個值。 另一個選擇是給直徑字段一個默認值,這樣即使從不顯式設置它,也總是隱式設置。

您應該調用setDiameter方法以繪制橢圓形。 但是我認為您應該將此方法與paintComponent合並。 通過這種方式,您不必在意調用該方法。

我的意思是:

public void paintComponent(Graphics g, int newD){

    super.paintComponent(g);

    diameter = (newD>=0 ? newD : 10);
    repaint();          

    g.fillOval(10,10,diameter,diameter);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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