java - 如何将 JPanel 添加到 JFrame 对象?
问题描述
初学者编程学生在这里。试图简单地创建允许我单击窗口边界并显示我单击位置的坐标的 JFrame 对象。但是,每当我单击一个新位置时,以前的坐标都需要消失。有人告诉我,一种方法是在 JFrame 对象的中心添加一个 JPanel。但是,当我这样做时,我收到一个错误,提示我正在向容器添加一个窗口。我可能从我读过的内容中错误地扩展了一些东西,但我似乎无法弄清楚。
public class Proj07 {
public static void main(String[] args){
new Proj07Runner();
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Proj07Runner{
GUI gui = new GUI();
}
class MyFrame extends JFrame{
int XCoor;
int YCoor;
public void paint(Graphics g){
g.drawString("x = " + XCoor + ", y = " + YCoor, XCoor, YCoor);
}
}
class GUI{
public GUI(){
MyFrame displayWindow = new MyFrame();
displayWindow.setSize(300,100);
displayWindow.setTitle("Insert name here");
displayWindow.addWindowListener(new WProc1());
JPanel myPanel = new JPanel();
displayWindow.getContentPane().add(myPanel, "Center");
displayWindow.setVisible(true);
}
}
class MouseProc extends MouseAdapter{
public void mousePressed(MouseEvent e){
((MyFrame)e.getComponent()).XCoor = e.getX();
((MyFrame)e.getComponent()).YCoor = e.getY();
e.getComponent().repaint();
}
}
class WProc1 extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
谢谢你们的帮助!
解决方案
我不是 100% 确定,但我认为问题在于你把听众放在哪里:
您需要在 JPanel 上执行所有操作,而不是作为容器的框架,因此您应该将声明替换为:
MyFrame displayWindow = new MyFrame();
displayWindow.setSize(300,100);
displayWindow.setTitle("Insert name here");
displayWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel myPanel = new JPanel();
myPanel.setSize(300,100);
myPanel.addMouseListener(new myMouse)
displayWindow.getContentPane().add(myPanel, "Center");
displayWindow.setVisible(true);
然后创建一个 mouseListener而不是 mouseAdapter 以添加到 JPanel 中。
还要删除最后一个 WindowsAdapter,只需使用 exitonclose。
编辑:
当涉及到框架应该做什么时,它应该只包含 panel,因此您还需要将您在框架上所做的所有事情都移动到面板上(例如public void paint()
and 东西)。
我什至会说,如果您想在一个框架上添加多个面板,您应该考虑将所有面板放在另一个面板(作为容器)中,然后将该面板放在框架内。
推荐阅读
- physics - 什么是 mouseResponse 阈值,为什么要设置特定阈值?
- python - 删除列表中彼此接近的数字
- ruby - 如何使用传递给 Graphql ruby 字段的参数来转换结果?
- javascript - 如何在 amChart 中更改气球位置
- phaser-framework - 移动设备上的活动指针问题,使用 Phaser 3
- javascript - 将数据推送到对象/数组以供以后比较
- plone - 页面刷新时日期消失(NewsItem)
- message-queue - Cloud Pub/Sub 订阅者崩溃故障转移场景
- jira - 连接 CA 敏捷集会与融合汇合
- python - 从 python 包中正确导入以满足内部包的需求