sách gpt4 ai đã đi

Java JFrame 边界

In lại 作者:行者123 更新时间:2023-12-02 04:01:37 27 4
mua khóa gpt4 Nike

我正在尝试编写执行以下操作的代码:如果我单击起始位置为 (100,100) 的字符串 C(JLabel),该字符串将在 JFrame 的边界内移动。代码本身并不难实现,但我遇到了问题为 JLabel 设置 (x,y),以便字符串“C”的任何部分都不会被截断。

nhập javax.swing.*;
nhập java.awt.event.*;
nhập java.awt.*;
public class adfadf extends JFrame{
JLabel text = new JLabel("C");
Container container = getContentPane();
public adfadf(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container.setLayout(null);
MyMouseListener mml = new MyMouseListener();
text.addMouseListener(mml);
text.setLocation(100,100);
text.setSize(30,30);
add(text);
setSize(400,400);
setVisible(true);
}


public static void main(String[] args) {
new adfadf();

}

}
class MyMouseListener extends MouseAdapter{
@Ghi đè
public void mouseClicked(MouseEvent e){
JLabel text = (JLabel)e.getSource();
int x = (int)(Math.random()*(400-30));
int y = (int)(Math.random()*(400-30));
text.setLocation(x,y);
}

}

我该如何改变

int x = (int)(Math.random()*(400-30));
int y = (int)(Math.random()*(400-30));

为了达到我想要的目的?

1 Câu trả lời

首先,了解 JFrame 比看起来要复杂得多

Đầu tiên,JFrame 有一个 JRootPane,其中包含 contentPaneJMenuBar玻璃 Pane

RootPane

由于窗口的装饰实际上是在框架的可见边界内绘制的,这意味着内容可用的可见区域实际上小于框架的大小,这使情况变得更加复杂。

您可以查看How can I set in the midst? , Graphics rendering in title barHow to get the EXACT middle of a screen, even when re-sized了解更多详细信息和示例。

但是这对你有什么帮助呢?好吧,现在您知道您有一个小于 400x400 的空间来显示标签,但是多少呢?

简单的解决方案是停止使用“神奇”数字,并查看框架使用的内容,即 contentPane. contentPane Phụ thuộc vào JFrame(通过 JRootPane)管理,因此它位于框架装饰内,因此您可以执行类似的操作...

JLabel text = (JLabel)e.getSource();
int width = getContentPane().getSize().width;
int height = getContentPane().getSize().height;
int x = (int)(Math.random()*(width-30));
int y = (int)(Math.random()*(height-30));
text.setLocation(x,y);

在此实例中查看 contentPane 的原因很简单,因为那是标签实际添加到的容器。

这就是为什么我们建议您不要使用“魔法”数字,而是在需要时查看实际的已知值的原因之一。

关于Java JFrame 边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835767/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com