【发布时间】:2015-06-06 17:40:14
【问题描述】:
我试图通过按一个按钮从我的主 GUI 打开一个 GUI。当按钮被按下时,执行:
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
这不会打开 WorkloadFactor GUI。我对此感到困惑,因为我有其他 GUI 以这种方式打开而没有问题。
WorkloadFactor 类在我自己运行时工作正常,但在我的主 GUI 调用它时不会打开。下面是我的类,没有导入和东西:
public class WorkloadFactor extends JPanel {
public WorkloadFactor() {
setLayout(new BorderLayout());
JTabbedPane tabbedPane = new JTabbedPane();
String[] tabnames = { "Zero", "One", "Two", "Three", "Four" };
for (int i = 0; i < tabnames.length; i++) {
tabbedPane.addTab(tabnames[i], createPane(tabnames[i]));
}
tabbedPane.setSelectedIndex(0);
JButton submit = new JButton("Submit All");
submit.setForeground(Color.RED);
add(tabbedPane, BorderLayout.CENTER);
add(submit, BorderLayout.SOUTH);
}
public JPanel createPane(final String t) {
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
//setContentPane(contentPane); I think this might be it?
contentPane.setLayout(null);
setBounds(100, 100, 531, 347);
//***** all the components I am including then add them like so
//******contentPane.add(checkbox1);
//****** contentpane.add(label1);
return contentPane;
}
public static void main(String[] args) {
JFrame frame = new JFrame("Set Workload Factor Information");
frame.getContentPane().add(new WorkloadFactor());
frame.setBounds(100, 100, 531, 347);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
我尝试过以多种方式安排事情,将所有内容都放在构造函数中并进行其他更改,但似乎找不到在其他地方实例化此 WorkloadFactor 类并将其设置为可见不起作用的原因。
是否与 setContentPane(contentPane) vs contentPane.add(xxxx) 并返回有关?
感谢您的阅读!
【问题讨论】:
-
为什么要为 contentPane 使用
null布局? -
@chancea 的评论同上——如果可能的话,你应该避免使用
null布局。使用它们会将您的程序标记为可能的“新手”程序,因为大多数创建了许多 Swing GUI 的人都知道创建和维护使用布局管理器的 GUI 会更容易。此外,您没有向我们展示最重要的代码——您的按钮应该在哪里显示此类。仅将其设置为可见还远远不够——您必须将其放入最终由顶级窗口(如 JFrame)保存的容器中。 -
@ Hovercraft Full Of Eels 是的,我是新手。我能够使用以下行打开有问题的 GUI:WorkloadFactor.main(null);从那里,一个 JFrame 被创建并在 WorkloadFactor 的主要方法中设置为可见。你能简单解释一下布局管理器是做什么的吗?感谢您的多次回复。
标签: java swing user-interface