起初我寫這個類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);
}
}
並且輸出只是一個沒有任何橢圓形的綠色背景的框架?
請澄清:合併有什麼的paintComponent? –
我的意思是你應該把setDiameter方法的代碼放在paintComponent中。您不需要單獨的方法來完成此任務。這樣你就不需要調用這個方法。我會編輯我的答案,看看我的意思。 –
更好地給直徑一個默認值,並且永遠不要**在'paint(Graphics g)'或'paintComponent(Graphics g)'方法內部調用'repaint()'。永遠。這有潛在的遞歸和/或不良副作用的風險。只是不要這樣做或推薦這個。 –