【发布时间】:2013-07-03 01:22:15
【问题描述】:
所以我在 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";
}
}
我尝试过的东西,但它打印为空
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";
}
}
【问题讨论】:
-
“我无法更改 JLabel/JFrame 的代码。” 除非它被声明为
final,否则可以extend类。这通常为更改或扩展类提供了几乎同样多的控制权。
标签: java swing object window jframe