[英]how to add a JPanel to a JFrame in java
在这段代码中,我创建了一个 JFrame 来显示用户单击的位置的 x 和 y 点。 正如您在示例中看到的那样,y 点是一个非常高的数字,因为它考虑了标题栏的高度。 我怎样才能得到它,所以可点击的左上角是 0,0?
现在 (0,0) 遥不可及,我不确定如何合并 JPanel 才能达到这一点。
如果需要,我可以进一步解释我的代码或澄清
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Proj07Runner {
Proj07Runner() {
System.out.println(
"Terminal");
new GUI();
}
}
class MyFrame extends Frame {
int clickX;
int clickY;
public void paint(Graphics g) {
g.drawString(" " + clickX + ", " + clickY, clickX, clickY);
}
}
class GUI {
public GUI(){ // constructor - set up frame
MyFrame frame = new MyFrame();
frame.setSize(300,100);
frame.setTitle("xxx");
frame.setVisible(true);
// window listent to allow users to close frame
frame.addWindowListener(new Close());
// mouse listener so we can print points for mouse clicks
frame.addMouseListener(new MouseProc(frame));
// JPanel
JPanel panel = new JPanel();
frame.add(panel);
}
}
// monitors closing window
class Close extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
// Monitor mouse clicks and gather x and y points
class MouseProc extends MouseAdapter {
MyFrame reference;
MouseProc(MyFrame winIn) {
reference = winIn;
}
@Override
public void mousePressed(MouseEvent e) {
reference.clickX = e.getX();
reference.clickY = e.getY();
reference.repaint();
}
}
我怎样才能得到它,所以可点击的左上角是 0,0?
将 MouseListener 添加到面板(而不是框架)。 鼠标点与您添加侦听器的组件相关。
然后应通过以下方式完成任何自定义绘画:
paintComponent(...)
方法,而不是paint(...)。阅读有关自定义绘画的 Swing 教程以获取更多信息和工作示例,包括使用 MouseListener 的示例。
从本质上讲,jpanel 没有特定的大小,只会在 jframe 中浮动而不做任何特别的事情。 您想要它做的是扩展以占据整个框架。 默认框架使用BorderLayout,所以需要使用border layout center,意思是“尽可能占用空间”
frame.add(panel, BorderLayout.CENTER)
如果您想成为一名优秀的 Swing 程序员,您应该非常熟悉如何使用 BorderLayout。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.