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