当前位置: 首页 > 面试题库 >

无法在JFrame上绘制

吉鸿宝
2023-03-14
问题内容

我正在尝试制作一个在鼠标本地化处绘制一个圆的简单Java程序,它获取了鼠标的X和Y坐标,但是它没有绘制任何内容,我试图绘制一个String,一个圆和一条线,但是没有任何效果,我稍微修改了代码,但仍然无法正常工作

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用于Mouse Motion收听的

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上绘制此椭圆形。 框架显示,但其中未绘制任何内容。我在这里做错了什么? 问题答案: 您创建了一个静态方法,该方法不会覆盖paint方法。现在,其他人已经指出,您需要覆盖paintComponent等。但是,为了快速修复,您需要执行以下操作: 但是,正如其他人指出的那样,在JFrame上进行绘制非常棘手。最好使用JPanel。

  • 问题内容: 我创建了一个程序,可以在屏幕上移动一个球。我以前把所有内容都放在一个类中,但认为它看起来太乱了,所以我将其分为三个不同的类:Main …初始化所有内容,Game …绘制所有内容并为一个JPanel,AL则为一个KeyListener(这也是问题所在)。问题是,无论我尝试将其传递给我的类,我都无法从AL类获得重绘程序。有人能帮忙吗?这是我的三个班级: -- -- 问题答案: 让我们从显而

  • 我创建了一个程序,只需在屏幕上移动一个球。我以前把它都放在一节课上,但我觉得它看起来太乱了,所以我把它分成了三个不同的课:主课。。。初始化一切,游戏。。。它描绘一切,是一个JPanel,AL是一个KeyListener(这也是问题所在)。问题是,我无法让程序从我的AL类重新绘制,无论我试图传递什么。有人能帮忙吗?以下是我的三门课: - -

  • 问题内容: 我知道这是我的错误。我的问题是,为什么这不起作用,我想念的是什么,我可以称其为方法而不是类,因此我假设他们的第三类有问题吗? 第1类: } 第2类: 第3类,这是我不能在jframe上使用的绘画: } 问题答案: 您的问题是您滥用继承。您的JVMDiagram正在扩展JVMComponent,但不应该。是的,您获得了JVMComponent的getWidth()和getHeight()

  • 我正在开发一个应用程序,它有一个应用程序功能,可以在谷歌地图上显示团队作为标记。 我可以把自己显示为移动时更新的标记 问题是,标记仅在我第一次转到MapFragment时显示。当我导航到另一个片段并返回到地图时,我看到一个没有标记的空地图 尝试#3,请查看以前实现的历史记录,这些实现略有不同: 我的片段布局: 我的IncidentMapFragment代码,现在根据用户反馈进行更新。更新很少。请参

  • 问题内容: 我正在像这样扩展JFrame: 但是,屏幕上只画了一个正方形,有人知道为什么吗? 我的广场课也看起来像这样: 问题答案: JFrame的contentPane默认使用BorderLayout。当您向其添加一个Square时,默认情况下会添加BorderLayout.CENTER并覆盖以前添加的所有Square。您将需要阅读所有可用于Swing GUI的布局管理器。 例如,从这里开始:在