【发布时间】:2013-01-17 18:47:37
【问题描述】:
我正在制作一个 Java gui 项目,它由两个框架组成。
问题是,当我从第一帧调用第二帧时,我已将其设置为第一帧可见性设置为 false。问题是如何使用第二帧中的按钮使第一帧再次可见。
我应该放弃这个方法并创建一个新的 jpanel 吗??? jpanel 和 jframe 有类似的能力吗?
【问题讨论】:
标签: java swing jframe visibility
我正在制作一个 Java gui 项目,它由两个框架组成。
问题是,当我从第一帧调用第二帧时,我已将其设置为第一帧可见性设置为 false。问题是如何使用第二帧中的按钮使第一帧再次可见。
我应该放弃这个方法并创建一个新的 jpanel 吗??? jpanel 和 jframe 有类似的能力吗?
【问题讨论】:
标签: java swing jframe visibility
考虑使用CardLayout。这样您就可以通过多个 UI 进行切换,而无需其他框架。 Here's how to use it.
编辑:正如 Guillaume 在他的评论中所发布的,来自 Andrew 的this 回答还涵盖了如何使用布局。
编辑2:
当您要求更多关于我的最新帖子的信息时,这样的类可能如下所示:
import javax.swing.JFrame;
public abstract class MyFrameManager {
static private JFrame startFrame,
anotherFrame,
justAnotherFrame;
static public synchronized JFrame getStartFrame()
{
if(startFrame == null)
{
//frame isnt initialized, lets do it
startFrame = new JFrame();
startFrame.setSize(42, 42);
//...
}
return startFrame;
}
static public synchronized JFrame getAnotherFrame()
{
if(anotherFrame == null)
{
//same as above, init it
}
return anotherFrame;
}
static public synchronized JFrame getJustAnotherFrame()
{
//same again
return justAnotherFrame;
}
public static void main(String[] args) {
//let's test!
JFrame start = MyFrameManager.getStartFrame();
start.setVisible(true);
//want another window
JFrame another = MyFrameManager.getAnotherFrame();
another.setVisible(true);
//oh, doenst want start anymore
start.setVisible(false);
}
}
这样你只会实例化每个JFrame 一次,但你总是可以通过你的经理类访问它们。在那之后你对他们做什么是你的决定。
我也刚刚使它成为线程安全的,这对于单例来说是至关重要的。
【讨论】:
JTabbedPane也可以用来去掉多帧的使用
CardLayout 在这种情况下是最好的选择。如果你想让多个帧同时可用,你也可以使用JDesktopPane 和JInternalFrames,但是 MDI 是昨天 imo ;)