无法在JFrame上绘制 [英] can't draw on JFrame

查看:126
本文介绍了无法在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 方法。

    不要为此目的使用无限循环。有 MouseMotionListener 用于鼠标移动侦听

    Don't use an infinite loop for this purpose. There is the MouseMotionListener for Mouse Motion listening

    public 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上绘制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆