/*If given constructor values draw moving circle
* But if it does not give him the values draws a line
*/
package samr;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
public class AX{
public static class panel extends JPanel{
public int w,c=1;
public panel(int start,int end){
int x=start;
int y=end;
w=x;
paint(?,x,y);
}
public panel(){
paint(?);
}
public void paint(Graphics e){
e.drawLine(0,0,500,500);
}
public void paint(Graphics g,int x,int y){
super.paint(g);
if(w<=y){
w=w+c;
if(w==x||w==y){c=c*-1;}
g.drawOval(w,0,50,50);
this.repaint();
}
}
}
public static void main(String[] arg){
JFrame f=new JFrame("test");
f.setBounds(100,100,500,500);
panel p=new panel(100,300);
f.add(p);
f.setVisible(true);
}
}
我在构造函数中使用的是图形吗?
答案 0 :(得分:1)
您没有,系统提供的,请查看Painting in AWT and Swing和Performing Custom Painting,了解有关绘画如何在Swing中工作的详细信息。
如果要更新组件,则应调用repaint
Swing中的绘画是通过被动算法完成的,为了提高性能,你永远不应该修改状态或调用任何可以在任何绘制方法中修改UI状态的功能,所以你应该删除{{1}用您的repaint
方法调用。
按照惯例,我们鼓励我们覆盖paint
而不是paintComponent
,这样做会更安全。
绘画应该绘制组件的当前状态,这意味着您需要将一些变量设置为所需的值,并调用paint
来更新它们。