300分的问题?帮我查一下问题出在哪里,高分重谢!! 对因为调整的时候会自动调用paintComponent而不是drawLines所以你最后在paintComponent中调用drawLines而不是在drawLines中调用paintComponent 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还没有行吗?写了个小程序,不知道算不算你说的‘随便画线’,希望有所帮助import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class DrawLinePanel{ public static void main(String[] args) { JFrame frame=new JFrame("--DrawLinePanel--"); Container con=frame.getContentPane(); MyPanel mp=new MyPanel(); MyMouseListener listener1=new MyMouseListener(mp); MyMouseListener2 listener2=new MyMouseListener2(mp); mp.addMouseListener(listener1); mp.addMouseMotionListener(listener2); con.add(mp,BorderLayout.CENTER); frame.setBounds(30,30,300,300); frame.show(); }}class MyPanel extends JPanel{ Vector v=new Vector(); MyPoint point=new MyPoint(); boolean flag=false; public void paintComponent(Graphics g) { super.paintComponent(g); Enumeration enum=v.elements(); while(enum.hasMoreElements()) { Object obj=enum.nextElement(); MyPoint p=(MyPoint)obj; g.drawLine(p.sX,p.sY,p.eX,p.eY); } if(flag) { g.drawLine(point.sX,point.sY,point.eX,point.eY); } }}class MyMouseListener extends MouseAdapter{ MyPanel dlp; public MyMouseListener(MyPanel d) { this.dlp=d; } public void mousePressed(MouseEvent e) { dlp.point.sX=e.getX(); dlp.point.sY=e.getY(); } public void mouseReleased(MouseEvent e) { if(dlp.flag) { dlp.v.add(new MyPoint(dlp.point.sX,dlp.point.sY,e.getX(),e.getY())); dlp.flag=false; dlp.point.reset(); dlp.repaint(); } }}class MyMouseListener2 extends MouseMotionAdapter{ MyPanel dlp=null; public MyMouseListener2(MyPanel d) { this.dlp=d; } public void mouseDragged(MouseEvent e) { dlp.flag=true; dlp.point.eX=e.getX(); dlp.point.eY=e.getY(); dlp.repaint(); }}class MyPoint{ int sX=0; int sY=0; int eX=0; int eY=0; public MyPoint() { } public MyPoint(int x,int y,int m,int n) { sX=x;sY=y;eX=m;eY=n; } void reset() { sX=0; sY=0; eX=0; eY=0; }} paintComponent()会调用panel的UI代表重绘整个panel,所以以前画的线都会消失,fightboy()说得应该没错。当然,照xioyoo()的程序中用Vector数组来保存所画的线,以便重绘是使用也是一种方法,选用哪种方法就要看你的程序的目的是什么了。 把g作为参数传到drawLines里去。在paintComponent(Graphics g)里调用,而不是在drawLines里调用paintComponent,paintComponent是自动调用的。 关于spring管理Timertask的问题 谁能帮我写个二维表的例子 [求助]这个程序怎么不会出现死锁? java如何实现编译任意目录下的java文件? 在linux下安装JDK有问题?请大家帮忙 学习中遇到了个问题,请大家帮忙一下 基本报错问题,高手指点,100分在线等待 关于font_chooser的用法 快来救命!SOS!!,我定义了一个package Geshan,放在文件夹Geshan中。。(再线等待)) JAVA初学者问题 问一个关于Java Plugin 的问题 哪里可以下载中文的JAVA类参考手册?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class DrawLinePanel
{
public static void main(String[] args)
{
JFrame frame=new JFrame("--DrawLinePanel--");
Container con=frame.getContentPane();
MyPanel mp=new MyPanel();
MyMouseListener listener1=new MyMouseListener(mp);
MyMouseListener2 listener2=new MyMouseListener2(mp);
mp.addMouseListener(listener1);
mp.addMouseMotionListener(listener2);
con.add(mp,BorderLayout.CENTER);
frame.setBounds(30,30,300,300);
frame.show();
}
}
class MyPanel extends JPanel
{
Vector v=new Vector();
MyPoint point=new MyPoint();
boolean flag=false;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Enumeration enum=v.elements();
while(enum.hasMoreElements())
{
Object obj=enum.nextElement();
MyPoint p=(MyPoint)obj;
g.drawLine(p.sX,p.sY,p.eX,p.eY);
}
if(flag)
{
g.drawLine(point.sX,point.sY,point.eX,point.eY);
}
}
}
class MyMouseListener extends MouseAdapter
{
MyPanel dlp;
public MyMouseListener(MyPanel d)
{
this.dlp=d;
}
public void mousePressed(MouseEvent e)
{
dlp.point.sX=e.getX();
dlp.point.sY=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(dlp.flag)
{
dlp.v.add(new MyPoint(dlp.point.sX,dlp.point.sY,e.getX(),e.getY()));
dlp.flag=false;
dlp.point.reset();
dlp.repaint();
}
}
}
class MyMouseListener2 extends MouseMotionAdapter
{
MyPanel dlp=null;
public MyMouseListener2(MyPanel d)
{
this.dlp=d;
}
public void mouseDragged(MouseEvent e)
{
dlp.flag=true;
dlp.point.eX=e.getX();
dlp.point.eY=e.getY();
dlp.repaint();
}
}
class MyPoint
{
int sX=0;
int sY=0;
int eX=0;
int eY=0;
public MyPoint()
{
}
public MyPoint(int x,int y,int m,int n)
{
sX=x;sY=y;eX=m;eY=n;
}
void reset()
{
sX=0;
sY=0;
eX=0;
eY=0;
}
}
当然,照xioyoo()的程序中用Vector数组来保存所画的线,以便重绘是使用也是一种方法,选用哪种方法就要看你的程序的目的是什么了。