我正试图通过按下按钮从我的主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)和contentPane.add(xxxx)有关并返回它?
感谢您阅读!
答案 0 :(得分:2)
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
说实话,这不会显示任何内容。请理解WorkloadFactor扩展了JPanel,并且必须将所有非顶级组件放入容器中,该容器最终由顶级窗口保持以便显示。看看如何在主方法中显示它 - 首先将其放入JFrame,然后显示该JFrame 。如果要在按下按钮时显示它,则必须执行相同的操作 - 您需要将其放入JPanel或由JFrame或JDialog或JOptionPane持有的其他容器中。
答案 1 :(得分:0)
确保您已在主GUI上正确注册了按钮,该按钮可将WorkLoadFactor GUI打开到动作监听器。
由于您尚未包含主GUI中的代码,因此我无法确认这是问题所在。然而,这是一个普遍被忽视的问题。
来自Java文档教程的一些建议:
“问题:我正在尝试处理组件中的某些事件,但该组件未生成应该发生的事件。
首先,确保您注册了正确类型的侦听器以检测事件。看看另一种听众是否可以检测到你需要的那种事件。
确保在正确的对象上注册了侦听器。
您是否正确实现了事件处理程序?例如,如果扩展了适配器类,请确保使用了正确的方法签名。确保每个事件处理方法都是公共无效的,名称拼写正确,并且参数的类型正确。“
答案 2 :(得分:0)
创建一个JFrame并在其中添加一个JButton,而不是在按钮中添加动作侦听器,并将此代码添加到其中:
此代码使用按钮创建一个框架,当按下按钮时,将打开新窗口。
public class Example extends JFrame {
public Example() {
super("Title");
setLayout(new FlowLayout());
JButton b = new JButton("Open new Frame");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
newWindow nw = new newWindow();
}
});
add(b);
}
}
newWindow代码:
public class newWindow extends JFrame {
newWindow() {
super("title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setVisible(true);
}
}