按下按钮时GUI不会打开(Java)

时间:2015-02-13 21:51:20

标签: java swing user-interface

我正试图通过按下按钮从我的主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)有关并返回它?

感谢您阅读!

3 个答案:

答案 0 :(得分:2)

WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);

说实话,这不会显示任何内容。请理解WorkloadFactor扩展了JPanel,并且必须将所有非顶级组件放入容器中,该容器最终由顶级窗口保持以便显示。看看如何在主方法中显示它 - 首先将其放入JFrame,然后显示该JFrame 。如果要在按下按钮时显示它,则必须执行相同的操作 - 您需要将其放入JPanel或由JFrame或JDialog或JOptionPane持有的其他容器中。

答案 1 :(得分:0)

确保您已在主GUI上正确注册了按钮,该按钮可将WorkLoadFactor GUI打开到动作监听器。

由于您尚未包含主GUI中的代码,因此我无法确认这是问题所在。然而,这是一个普遍被忽视的问题。

来自Java文档教程的一些建议:

“问题:我正在尝试处理组件中的某些事件,但该组件未生成应该发生的事件。

首先,确保您注册了正确类型的侦听器以检测事件。看看另一种听众是否可以检测到你需要的那种事件。

确保在正确的对象上注册了侦听器。

您是否正确实现了事件处理程序?例如,如果扩展了适配器类,请确保使用了正确的方法签名。确保每个事件处理方法都是公共无效的,名称拼写正确,并且参数的类型正确。“

source: Solving Common Event-Handling Problems

答案 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);
 }  
}