热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java–重新绘制JPanel会出错

我是Java的初学者,我正在尝试创建一个绘制矩形的应用程序,无论光标位于何处.我已经完成了所有工作,但是我无法使用mouseMoved(MouseEvent)方法重新绘制JPanel.没有重绘,

我是Java的初学者,我正在尝试创建一个绘制矩形的应用程序,无论光标位于何处.我已经完成了所有工作,但是我无法使用mouseMoved(MouseEvent)方法重新绘制JPanel.没有重绘,矩形只绘制一次,就是这样.使用重绘,它编译得很好,但是当我运行它时,每次移动鼠标时,我都会得到这个大的“线程异常”AWT-EventQueue-0“java.lang.NullPointerException”错误.

那么,任何人都可以帮我解决这个问题吗?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Game extends JPanel implements MouseMotionListener
{
public static void main(String[] args) {
new Game().game();
}
JPanel panel;
JButton button2;
JButton button;
public void game() {
JPanel panel = new Game();
button = new JButton("Ok");
panel.setLayout(new FlowLayout());
panel.add(button);
button2 = new JButton("Cancel");
JFrame frame = new JFrame("Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setResizable(false);
frame.add(panel);
frame.setVisible(true);
panel.addMouseMotionListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
g.fillRect(x,y,100,100);
}
public void mouseMoved(MouseEvent evt) {
panel.repaint; //This is the line of code that I need help with. Thanks!
}
public void mouseDragged(MouseEvent evt) {}
}

解决方法:

希望代码示例中的注释能够告诉您代码中的错误:-),否则总有理由提出您的疑问……

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Game extends JPanel {
/*
* Now x and y are instance variables,
* whose values you can change at each
* MouseMove Event, and call repaint()
* to see the effects
*/
private int x;
private int y;
private MouseAdapter mouseActiOns=
new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent me) {
/*
* Now as the Mouse moves, we simply
* updating the instance variables,
* i.e. x and y to the new values
* of the Mouse Location and calling
* repaint() to draw the rectangle.
* Since this class (Game) extends JPanel,
* hence all the functions of the JPanel
* belongs to this class, hence like
* as we call any other method of this
* class, without using the object,
* we can call repaint, likewise.
*/
x = me.getX();
y = me.getY();
repaint();
}
};
/*
* This JPanel panel is unnecessary in
* this case, since the class itself
* extends JPanel, hence you can use
* this (keyword) to access the instance
*/
//JPanel panel;
// Not needed for this case.
//JButton button2;
//JButton button;
public void game() {
JFrame frame = new JFrame("Game");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setResizable(false);
addMouseMotionListener(mouseActions);
/*
* Here this means the instance
* of the current class
*/
frame.add(this);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
/*
* While overriding methods of the
* super class, try to keep the
* ACCESS SPECIFIER, as close to
* the original thingy as possible
* In this case, it's protected
* and not public
*/
@Override
protected void paintComponent(Graphics g) {
/*
* Do not perform calculation in this method
* atleast.
*/
super.paintComponent(g);
g.fillRect(x, y, 100, 100);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {new Game().game();
}
};
EventQueue.invokeLater(runnable);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
}


推荐阅读
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • Go语言实现文件读取与终端输出
    本文介绍如何使用Go语言编写程序,通过命令行参数指定文件路径,读取文件内容并将其输出到控制台。代码示例中包含了错误处理和资源管理的最佳实践。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
  • 本文详细介绍了如何在Java Swing中使用`JButton.registerKeyboardAction()`方法来为按钮设置键盘快捷键,并提供了多个实用的代码示例。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 设计一个算法,用于计算给定字符串中出现的不同ASCII字符数量。该任务将重点考察字符串处理、集合操作以及基础的输入输出技术。 ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 编码unicode解决了语言不通的问题.但是.unicode又有一个新问题.由于unicode是万国码.把所有国家的文字都编进去了.这就导致一个unicode占用的空间会很大.原来 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
author-avatar
子晴一-夏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有