JAVA swing编程 画图问题 paint()方法

初学java图形化编程,想按照输入的数据画图大意就是publicclassDemoextendsJFrame{privateCoordinateNodeCo;//存储坐标... 初学java图形化编程,想按照输入的数据画图

大意就是
public class Demo extends JFrame {
private Coordinate NodeCo; //存储坐标
Demo(String str){
super(str);
setLayout(null);
setVisible(true);
setBounds(150, 150, 1000, 500);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
DrawPanel Canvas=new DrawPanel();
setContentPane(Canvas);
//每次到这里的时候图就画好了吧
/*
这里有输入文本框、按钮
作用是把输入的X,Y坐标值传入NodeCo
*/
class DrawPanel extends JPanel{
public void paint(Graphics g){//请问能把其他参数传进来吗
super.paint(g);
Graphics2D g2=(Graphics2D)g;
// g2.fill(new Ellipse2D.Double(NodeCo.getX()+200, NodeCo.getY()+80, 10, 10));
//在这儿想根据窗口出来之后输入的坐标画图,请问怎么实现
}
}
}

我想根据输入的坐标,点击画图按钮再画图,但是每次都是窗口出来的同时画好图了

请问怎么改能达到我想要的效果
展开
 我来答
abcaght
2017-03-12 · TA获得超过248个赞
知道答主
回答量:301
采纳率:0%
帮助的人:64.6万
展开全部
super.paint()的作用是把当前的区域清空,每次resize的时候就会自动调用paint()方法,paint()方法里先调用了super.paint()清空当前区域,再画一个矩型筐,当然每次只有一个了。 另外你的算法也有漏洞,当你想从右上角拉到左下角画矩形的时候是没有反应的。 下面这个程序修改了只画一个的错误,改进了右上角拉到左下角的漏洞,还增加了拖动的中间过程。没时间给你写注释,自己看吧。 import java.awt.*; import java.awt.event.*; import java.util.Vector; import javax.swing.*; public class Hello extends JFrame implements MouseListener,MouseMotionListener{ int x一,y一; Vector rectangles=null; public Hello(){ this.setTitle("画图小程序"); this.addMouseListener(this); this.addMouseMotionListener(this); this.setSize(四00,四00); rectangles=new Vector(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint(Graphics g){ super.paint(g); g.setColor(Color.BLUE); for(int i=0;i<rectangles.size();i++){ Rectangle rec=rectangles.get(i); int tmp_x=rec.x; int tmp_y=rec.y; int tmp_w=rec.width; int tmp_h=rec.height; g.drawRect(tmp_x,tmp_y,tmp_w,tmp_h); } } public static void main(String[] args) { new Hello(); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { x一=e.getX();y一=e.getY(); } public void mouseReleased(MouseEvent e) { int x二=e.getX(); int y二=e.getY(); int x=0; int y=0; Graphics g=this.getGraphics(); g.setColor(Color.BLUE); int tmp_w=0; int tmp_h=0; if(x一x二){ x=x二; tmp_w=x一-x二; } if(y一y二){ y=y二; tmp_h=y一-y二; } rectangles.add(new Rectangle(x,y,tmp_w,tmp_h)); this.repaint(); } public void mouseDragged(MouseEvent e) { int x二=e.getX(); int y二=e.getY(); int x=0; int y=0; Graphics g=this.getGraphics(); g.setColor(Color.BLUE); int tmp_w=0; int tmp_h=0; if(x一x二){ x=x二; tmp_w=x一-x二; } if(y一y二){ y=y二; tmp_h=y一-y二; } paint(g); g.drawRect(x,y,tmp_w,tmp_h); } public void mouseMoved(MouseEvent e) { }
追问
不要复制其他答案谢谢。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式