问题是如何删除旧线?我的意思是,只在屏幕上显示当前的x和y行,使两行之间的交点“跟随”鼠标指针。
这是更新的代码:
import javax.swing.*;
import javax.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics.*;
import java.awt.event.*;
import javax.swing.UIManager;
public class SimpleGUI extends JFrame {
public SimpleGUI() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
}
public void go() {
Drawpanel = new Mypanel();
JFrame frame = new JFrame("Chasing Line");
JButton mybutton1 = new JButton("Please");
JButton mybutton2 = new JButton("Help");
JButton mybutton3 = new JButton("Me!!");
Drawpanel.add(mybutton1);
Drawpanel.add(mybutton2);
Drawpanel.add(mybutton3);
frame.getContentPane().add(BorderLayout.CENTER, Drawpanel);
frame.setSize(300,300);
frame.setVisible(true);
Drawpanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
DrawpanelMouseMoved(evt);
}
});
}
public void DrawpanelMouseMoved(java.awt.event.MouseEvent evt) {
xpos=evt.getX();
ypos=evt.getY();
System.out.println("Coordinates : X :"+ xpos+"Y: "+ypos);
Drawpanel.paintImage(xpos,ypos);
}
class Mypanel extends JPanel {
public void paintImage(int xpost,int ypost){
Graphics d = getGraphics();
d.clearRect(0,0, this.getWidth(), this.getHeight());
d.setColor(Color.black);
d.drawLine(xpost, 0, xpost, this.getHeight());
d.setColor(Color.red);
d.drawLine(0, ypost, this.getWidth(),ypost);
this.validate();
}
} // end the inner class
public static void main(String[] args){
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e) {
System.err.println("Look and feel not set");
}
SimpleGUI win = new SimpleGUI();
win.go();
}
Mypanel Drawpanel;
private int xpos=0;
private int ypos=0;
} // close SimpleGUI class
问题是如何保持这3个按钮不改变其状态?
答案 0 :(得分:7)
问题是我怎样才能删除旧线?我认为,只有当前的x和y线出现在屏幕上,使两条线之间的交点“跟随”鼠标指针。
或者,如果您不想保存任何行:
您可以使用以下方式再次绘制背景:
clearRect(int x, int y, int width, int height)
答案 1 :(得分:0)
你需要在d.clear();
行之后Graphics d = getGraphics();
执行{{1}},这将清除现有的图形以及之后绘制的内容将会显示所有内容。
答案 2 :(得分:0)
你永远不应该使用调用getGraphics()的代码。通过覆盖paintComponent()方法完成自定义绘制。
Custom Painting Approaches显示了两种不同的基本绘画方法。
我不确定我理解你关于“小部件”的问题,但是这些例子的按钮不受绘画的影响。