gpt4 book ai didi

java - 查找元素所在的 JFrame

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:48 25 4
gpt4 key购买 nike

所以我在 JFrame 的 JLabel 中有一个对象。

我无法更改 JLabel/JFrame 的代码。

如何让对象返回它所在的 JFrame?

图形用户界面

import javax.swing.*;
public class GUI extends JFrame
{
public GUI()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
setSize(100,50);

JLabel label = new JLabel(new TestObject().toString());
label.setBounds(5,5,90,20);
add(label);

setVisible(true);
}
}

我的对象

public class TestObject
{
public String toString()
{
return "TestObject";
}
}

我尝试过但它打印的是 null

import java.awt.*;
import javax.swing.*;
public class TestObject
{
public TestObject()
{
new Bug();
}
public String toString()
{
return "TestObject";
}
private class Bug extends Component
{
public Bug()
{
System.out.println(SwingUtilities.getWindowAncestor(this));
}
}
}

我可以做到这一点,但假设我已经知道标题

import java.awt.*;
import javax.swing.*;
public class TestObject
{
public TestObject()
{
for(Window w : Window.getWindows())
{
Frame f = (Frame) w;
if(f.getTitle().equals("hi"))
{
JFrame g = (JFrame) f;
JLabel j = new JLabel("Test");
j.setBounds(5,20,90,20);
g.add(j);
g.repaint();
}
}
}
public String toString()
{
return "TestObject";
}
}

最佳答案

您始终可以使用SwingUtilities帮助您:

SwingUtilities.getWindowAncestor(Component c)

这会返回一个顶级 Window 对象,如果该组件由 JFrame 持有,该对象将成为该组件的祖先 JFrame。如果该组件。如果它由不同的顶级窗口(例如 JDialog)保存,那么这就是将返回的内容。如果该组件尚未被窗口持有,那么这将根据 SwingUtilities API 返回 null 。请注意,如果您想使用以 JFrame 特定方式返回的对象,您可能需要进行一些转换(在首先检查之后)。

关于java - 查找元素所在的 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com