为什么我离开这个JPANEL,再次进入,就会多一条线。 调用了g.setXORMode(getBackground());之后,在某个位置绘制一条线之后,需要在相同位置再绘制一条线,才会将第一次的线清楚。所以建议你在程序里记住上一次绘制线的位置,在每次绘制线条的时候,首先在原来的位置绘制一次,然后再在新的位置绘制。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如 lapwing2002() 所说,异或模式的意义就是那样不过看问题的话,我更想看你的paint(Graphics g)或者是paintComoponent(Graphics g)方法是怎么写的。 public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(50,450,550,450); g.drawLine(50,20,50,450); Polygon p10 = new Polygon(); p10.addPoint(45,20); p10.addPoint(55,20); p10.addPoint(50,15); g.drawPolygon(p10); Polygon p11 = new Polygon(); p11.addPoint(550,445); p11.addPoint(550,455); p11.addPoint(555,450); g.drawPolygon(p11); try { SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(new FileInputStream("xxx.xml")); Element root = doc.getRootElement(); double big = 0.0; int total = 0; int paytotal = 0; if(!Const.findElement(root.getChild("income"),aYear)) { g.setColor(Color.red); g.drawString("(选择的年没数据)",250,250); g.setColor(Color.black); } else { int[] gx = new int[12]; int[] gy = new int[12]; int[] pgy = new int[12]; for(int i=1;i<=12;i++) { total = 0; paytotal = 0; if(Const.findElement(root.getChild("income"). getChild(aYear),"a"+i)) { for(int r=0;r<root.getChild("income"). getChild(aYear).getChild("a"+i).getChildren().size();r++) { System.out.println("这个月数据为"); total = total+Integer.parseInt(((Element)root.getChild("income"). getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num")); } if((int)big < total) { big = (double)total; } System.out.println("这个月数据为"+total); } else { System.out.println("这个月数据为0"); total = 0; } if(Const.findElement(root.getChild("payout"). getChild(aYear),"a"+i)) { for(int r=0;r<root.getChild("payout"). getChild(aYear).getChild("a"+i).getChildren().size();r++) { System.out.println("这个月数据为"); paytotal = paytotal+Integer.parseInt(((Element)root.getChild("payout"). getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num")); } if((int)big < paytotal) { big = (double)paytotal; } System.out.println("这个月数据为"+paytotal); } else { System.out.println("这个月数据为0"); paytotal = 0; } g.drawLine(50+i*40,445,50+i*40,450); g.drawString(""+i,50+i*40-4,465); gx[i-1] = (50+i*40); gy[i-1] = total; pgy[i-1] = paytotal; } System.out.println("^"+big+"^"); for(int h=1;h<=20;h++) { g.drawLine(50,450-(int)((toplimit/20)*h*(400/toplimit)),55,450-(int)((toplimit/20)*h*(400/toplimit))); g.drawString(""+(int)(toplimit/20)*h,15,450-(int)((toplimit/20)*h*(400/toplimit))+5); } g.drawString("(月)",555,465); Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); g2d.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY ); g2d.setStroke(new BasicStroke(1F,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); for(int j=0;j<12;j++) { if(j==11) { } else { g2d.setPaint(Color.red); g2d.drawLine(gx[j],(int)(450-gy[j]*(400/toplimit)),gx[j+1],450-(int)(gy[j+1]*(400/toplimit))); g2d.setPaint(Color.green); g2d.drawLine(gx[j],(int)(450-pgy[j]*(400/toplimit)),gx[j+1],450-(int)(pgy[j+1]*(400/toplimit))); } } } } catch(Exception e1) { System.out.println(e1); } } public void mouseDragged(MouseEvent evt) { System.out.println(evt.getX()); Graphics g = getGraphics(); g.setXORMode(getBackground()); g.drawLine(start.x,50,end.x,450); g.drawLine(start.x,50,end.x,450); g.dispose(); }这样写对不对呢 写个update()里面就一句paint();这是什么意思 写个update()里面就一句paint();没用还是老样子 public void mouseDragged(MouseEvent evt) { System.out.println(evt.getX()); Graphics g = getGraphics(); g.setXORMode(getBackground()); g.drawLine(start.x,50,end.x,450); g.drawLine(start.x,50,end.x,450); g.dispose(); }其实就是这段代码,这根线就是它画的, import java.awt.*;import java.awt.event.*;import javax.swing.*;public class TestGraphics extends JFrame{ Point start=new Point(); Point end=new Point(); public TestGraphics(){ this.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ System.out.println (e); if(e.getButton()==MouseEvent.BUTTON1){ start.x=e.getPoint().x; start.y=e.getPoint().y; } else{ end.x=e.getPoint().x; end.y=e.getPoint().y; Graphics g=getGraphics(); int r=(int)(Math.random()*255); int gg=(int)(Math.random()*255); int b=(int)(Math.random()*255); g.setColor(new Color(r,gg,b)); g.drawLine(start.x,start.y,end.x,end.y); g.dispose(); } } }); this.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseDragged(MouseEvent e){ Graphics g = getGraphics(); g.setXORMode(getBackground()); int r=(int)(Math.random()*255); int gg=(int)(Math.random()*255); int b=(int)(Math.random()*255); g.setColor(new Color(r,gg,b)); g.drawLine(start.x,start.y,e.getPoint().x,e.getPoint().y); g.dispose(); } }); setSize(512,384); Container c=this.getContentPane(); c.add(new P()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args){ new TestGraphics(); }}class P extends JPanel{ public P(){ } public void paintComponent(Graphics g){ super.paintComponent(g); }}我怎么画不上线去啊,画一下就是一大片。 g.drawLine(start.x,start.y,e.getPoint().x,e.getPoint().y);再画一遍,什么都没有了。 新人求助! 怎样在图片上画线?JAVA 菜鸟问题。scjp中的题。 Java中对象的hashcode是什么东西? 黄昏(宣传版 诗歌) 编译问题 运行时出错 split怎么不好使了 SWT是只有java包呢还是还有像dll这种文件? 怎样写一个文件控制数据库连接??在线等,解决后马上送分!! 在JAVA中怎样获取所有能连上的服务器的IP或计算机名? 提问 c# 中的 XmlTextWriter 相当于java里的那个类 ????(在线等)
或者是paintComoponent(Graphics g)
方法是怎么写的。
{
super.paintComponent(g);
g.drawLine(50,450,550,450);
g.drawLine(50,20,50,450);
Polygon p10 = new Polygon();
p10.addPoint(45,20);
p10.addPoint(55,20);
p10.addPoint(50,15);
g.drawPolygon(p10);
Polygon p11 = new Polygon();
p11.addPoint(550,445);
p11.addPoint(550,455);
p11.addPoint(555,450);
g.drawPolygon(p11);
try
{
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(new FileInputStream("xxx.xml"));
Element root = doc.getRootElement();
double big = 0.0;
int total = 0;
int paytotal = 0;
if(!Const.findElement(root.getChild("income"),aYear))
{
g.setColor(Color.red);
g.drawString("(选择的年没数据)",250,250);
g.setColor(Color.black);
}
else
{
int[] gx = new int[12];
int[] gy = new int[12];
int[] pgy = new int[12];
for(int i=1;i<=12;i++)
{
total = 0;
paytotal = 0;
if(Const.findElement(root.getChild("income").
getChild(aYear),"a"+i))
{
for(int r=0;r<root.getChild("income").
getChild(aYear).getChild("a"+i).getChildren().size();r++)
{
System.out.println("这个月数据为");
total = total+Integer.parseInt(((Element)root.getChild("income").
getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num"));
}
if((int)big < total)
{
big = (double)total;
}
System.out.println("这个月数据为"+total);
}
else
{
System.out.println("这个月数据为0");
total = 0;
}
if(Const.findElement(root.getChild("payout").
getChild(aYear),"a"+i))
{
for(int r=0;r<root.getChild("payout").
getChild(aYear).getChild("a"+i).getChildren().size();r++)
{
System.out.println("这个月数据为");
paytotal = paytotal+Integer.parseInt(((Element)root.getChild("payout").
getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num"));
}
if((int)big < paytotal)
{
big = (double)paytotal;
}
System.out.println("这个月数据为"+paytotal);
}
else
{
System.out.println("这个月数据为0");
paytotal = 0;
}
g.drawLine(50+i*40,445,50+i*40,450);
g.drawString(""+i,50+i*40-4,465);
gx[i-1] = (50+i*40);
gy[i-1] = total;
pgy[i-1] = paytotal;
}
System.out.println("^"+big+"^");
for(int h=1;h<=20;h++)
{
g.drawLine(50,450-(int)((toplimit/20)*h*(400/toplimit)),55,450-(int)((toplimit/20)*h*(400/toplimit)));
g.drawString(""+(int)(toplimit/20)*h,15,450-(int)((toplimit/20)*h*(400/toplimit))+5);
}
g.drawString("(月)",555,465);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2d.setRenderingHint( RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY );
g2d.setStroke(new BasicStroke(1F,BasicStroke.CAP_ROUND,
BasicStroke.JOIN_BEVEL));
for(int j=0;j<12;j++)
{
if(j==11)
{
}
else
{
g2d.setPaint(Color.red);
g2d.drawLine(gx[j],(int)(450-gy[j]*(400/toplimit)),gx[j+1],450-(int)(gy[j+1]*(400/toplimit)));
g2d.setPaint(Color.green);
g2d.drawLine(gx[j],(int)(450-pgy[j]*(400/toplimit)),gx[j+1],450-(int)(pgy[j+1]*(400/toplimit)));
}
}
}
}
catch(Exception e1)
{
System.out.println(e1);
}
}
{
System.out.println(evt.getX());
Graphics g = getGraphics();
g.setXORMode(getBackground());
g.drawLine(start.x,50,end.x,450);
g.drawLine(start.x,50,end.x,450);
g.dispose();
}
这样写对不对呢
这是什么意思
没用还是老样子
{
System.out.println(evt.getX());
Graphics g = getGraphics();
g.setXORMode(getBackground());
g.drawLine(start.x,50,end.x,450);
g.drawLine(start.x,50,end.x,450);
g.dispose();
}
其实就是这段代码,这根线就是它画的,
import java.awt.event.*;import javax.swing.*;public class TestGraphics extends JFrame{
Point start=new Point();
Point end=new Point();
public TestGraphics(){
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
System.out.println (e);
if(e.getButton()==MouseEvent.BUTTON1){
start.x=e.getPoint().x;
start.y=e.getPoint().y;
}
else{
end.x=e.getPoint().x;
end.y=e.getPoint().y;
Graphics g=getGraphics();
int r=(int)(Math.random()*255);
int gg=(int)(Math.random()*255);
int b=(int)(Math.random()*255);
g.setColor(new Color(r,gg,b));
g.drawLine(start.x,start.y,end.x,end.y);
g.dispose();
}
} });
this.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
Graphics g = getGraphics();
g.setXORMode(getBackground());
int r=(int)(Math.random()*255);
int gg=(int)(Math.random()*255);
int b=(int)(Math.random()*255);
g.setColor(new Color(r,gg,b));
g.drawLine(start.x,start.y,e.getPoint().x,e.getPoint().y);
g.dispose();
}
});
setSize(512,384);
Container c=this.getContentPane();
c.add(new P());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
} public static void main(String[] args){
new TestGraphics();
}
}class P extends JPanel{
public P(){ }
public void paintComponent(Graphics g){
super.paintComponent(g);
}
}我怎么画不上线去啊,画一下就是一大片。
再画一遍,什么都没有了。