如何将 JPanel 添加到 JFrame 对象?
How to add a JPanel to a JFrame object?
这里是编程初学者。尝试简单地创建 JFrame 对象,使我可以单击 window 的边界并显示我单击的坐标。但是,每当我单击一个新位置时,以前的坐标都需要消失。有人告诉我,一种方法是将 JPanel 添加到 JFrame 对象的中心。但是,当我这样做时,我收到一条错误消息,提示我正在向容器中添加 window。我可能从我读到的内容中错误地扩展了一些东西,但我似乎无法弄清楚。
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。
编辑:
当涉及到框架应该做什么时,它应该 只包含面板 ,因此您还需要将您在框架上所做的一切移动到面板(例如 public void paint()
和东西)。
我什至会说,如果你想在框架上添加多个面板,你应该考虑将所有面板 放在另一个面板 中(作为容器),然后将那个面板放在帧.
这里是编程初学者。尝试简单地创建 JFrame 对象,使我可以单击 window 的边界并显示我单击的坐标。但是,每当我单击一个新位置时,以前的坐标都需要消失。有人告诉我,一种方法是将 JPanel 添加到 JFrame 对象的中心。但是,当我这样做时,我收到一条错误消息,提示我正在向容器中添加 window。我可能从我读到的内容中错误地扩展了一些东西,但我似乎无法弄清楚。
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。
编辑:
当涉及到框架应该做什么时,它应该 只包含面板 ,因此您还需要将您在框架上所做的一切移动到面板(例如 public void paint()
和东西)。
我什至会说,如果你想在框架上添加多个面板,你应该考虑将所有面板 放在另一个面板 中(作为容器),然后将那个面板放在帧.