从另一个类更改JFrame的标题

时间:2012-12-19 17:29:41

标签: java swing jframe jpanel titlebar

我有两个类,一个AnalogClock类和一个MainInterface类。

我在AnalogClock类中创建了一个timeChanged方法,只要时间发生变化就会调用它。我的AnalogClock基本上是一个带绘图的JPanel。在MainInterface中,我设置了一个JFrame并添加了一个我的AnalogClock的对象。

是否可以随时更改我的窗口标题' timeChanged'叫做?我尝试使用getParent()getRootParent(),但他们不认识setTitle()

3 个答案:

答案 0 :(得分:5)

使用SwingUtilities中的getWindowAncestor方法。

//This gives you the first Window Object that contains the panel component
Window window = SwingUtilities.getWindowAncestor(panel);

//Cast it to JFrame
JFrame frame = (JFrame) window;

 //Now, change the title
frame.setTitle("New Title");

答案 1 :(得分:1)

最简单的方法是将JFrame的引用传递给JPanel并调用setTitle()。使用getParent(),您将确定返回的Container的正确类型,然后在找到JFrame引用后,将其转换为setTitle

我通常按照第一个建议来做。

答案 2 :(得分:0)

听起来timeChanged应该在MainInterface课程中,因为timeChanged需要同时引用AnalogClockJFrame。原因是您的AnalogClock可能不应与您的JFrame相关联。