本文介绍了无法在JFrame上绘制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试制作一个simle java程序,在鼠标定位时绘制一个圆圈,它获取鼠标X和Y坐标,但它不会绘制任何东西,我试图画一个字符串,一个圆圈和一条线但没有任何效果,我改变了一些代码,但它仍然不起作用
I'm trying to make a simle java program that draws a circle at the mouse localization, it gets the mouse X and Y coordinates but it doesn't draw anything, i tried to draw a String, a circle and a line but nothing worked, i changed the code a bit but it still doesn't works
class Test4 {
public static String a;
public static JFrame frame = new JFrame();
public static Point Gett(){
PointerInfo h = MouseInfo.getPointerInfo();
Point b = h.getLocation();
return b;
}
public void paintComponent(int x, int y, Graphics g) {
g.drawOval(x, y, 10, 10);
}
public static void main(String[] args) throws InterruptedException {
int h = 250;
int f = 200;
frame.setVisible(true);
frame.setSize(h, f);
frame.setLocationRelativeTo(null);
while(true){
Point b = Gett();
int x = (int) b.getX();
int y = (int) b.getY();
System.out.println(x);
System.out.println(y);
frame.repaint();}}}
推荐答案
-
不要直接在
JFrame
上执行自定义绘画。如果可以,请始终在JComponent
上覆盖paintComponent
方法。不要为此目的使用无限循环。有用于鼠标移动侦听
Don't use an infinite loop for this purpose. There is the
MouseMotionListener
for Mouse Motion listeningpublic class Test4 { public static String a; public static CustomDrawingPanel content; public static JFrame frame = new JFrame(); final static int OVAL_WIDTH = 10; final static int OVAL_HEIGHT = 10; static int x = -20, y = -20; public static MouseMotionListener listener = new ContentListener(); public static void main(String[] args) throws InterruptedException { int h = 250; int f = 200; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); content = new CustomDrawingPanel(); content.addMouseMotionListener(listener); frame.add(content); frame.getContentPane().setPreferredSize(new Dimension(h, f)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } //class that performs custom drawing static class CustomDrawingPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); //Always call this g.drawOval(x, y, 10, 10); } } //listener to the mouse motion static class ContentListener implements MouseMotionListener { @Override public void mouseDragged(MouseEvent e) { mouseMoved(e); //if you delete this line, when you drag your circle will hang } @Override public void mouseMoved(MouseEvent e) { x = e.getX() - OVAL_WIDTH / 2; y = e.getY() - OVAL_HEIGHT / 2; content.repaint(); } } }
这篇关于无法在JFrame上绘制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!