按下按钮时 GUI 不会打开 (Java)
GUI won't open when button pressed (Java)
我正在尝试通过按一个按钮从我的主 GUI 打开一个 GUI。按下按钮时,将执行此操作:
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
这不会打开 WorkloadFactor GUI。我对此感到困惑,因为我有其他 GUI 可以通过这种方式打开而没有问题。
WorkloadFactor class 当我 运行 它本身时工作正常,但当它被我的主 GUI 调用时不会打开。下面是我的 class 没有进口和东西:
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 class 并将其设置为可见的原因不起作用.
是否与 setContentPane(contentPane) vs contentPane.add(xxxx) 和返回有关?
感谢阅读!
确保您已在主 GUI 上正确注册按钮,该按钮会向操作侦听器打开 WorkLoadFactor GUI。
由于您没有包含主 GUI 中的代码,我无法确认这就是问题所在。然而这是一个普遍被忽视的问题。
以下是 Java 文档教程中的一些建议:
“问题:我正在尝试处理来自某个组件的某些事件,但该组件没有生成它应该生成的事件。
首先,确保您注册了正确类型的侦听器来检测事件。查看另一种侦听器是否可以检测到您需要的事件类型。
确保您在正确的对象上注册了侦听器。
您是否正确实现了事件处理程序?例如,如果您扩展了一个适配器 class,那么请确保您使用了正确的方法签名。确保每个事件处理方法都是 public void,名称拼写正确且参数类型正确。"
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
说白了,这不会显示任何东西。请理解,WorkloadFactor 扩展了 JPanel,并且像所有非顶级组件一样,必须将其放入最终由顶级 window 持有的容器中才能显示。看看你是如何在你的 main 方法中显示它的——你首先把它放入一个 JFrame,然后显示那个 JFrame。如果您想在按下按钮时显示它,您必须做同样的事情——您需要将它放入 JPanel 或由 JFrame 或 JDialog 或 JOptionPane 持有的其他容器中。
制作一个 JFrame 并在其中添加一个 JButton,然后在按钮中添加动作侦听器并在其中添加以下代码:
这段代码制作了一个带有按钮的框架,当按下按钮时,新的 window 被打开。
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);
}
}
新窗口代码:
public class newWindow extends JFrame {
newWindow() {
super("title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setVisible(true);
}
}
我正在尝试通过按一个按钮从我的主 GUI 打开一个 GUI。按下按钮时,将执行此操作:
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
这不会打开 WorkloadFactor GUI。我对此感到困惑,因为我有其他 GUI 可以通过这种方式打开而没有问题。
WorkloadFactor class 当我 运行 它本身时工作正常,但当它被我的主 GUI 调用时不会打开。下面是我的 class 没有进口和东西:
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 class 并将其设置为可见的原因不起作用.
是否与 setContentPane(contentPane) vs contentPane.add(xxxx) 和返回有关?
感谢阅读!
确保您已在主 GUI 上正确注册按钮,该按钮会向操作侦听器打开 WorkLoadFactor GUI。
由于您没有包含主 GUI 中的代码,我无法确认这就是问题所在。然而这是一个普遍被忽视的问题。
以下是 Java 文档教程中的一些建议:
“问题:我正在尝试处理来自某个组件的某些事件,但该组件没有生成它应该生成的事件。
首先,确保您注册了正确类型的侦听器来检测事件。查看另一种侦听器是否可以检测到您需要的事件类型。
确保您在正确的对象上注册了侦听器。
您是否正确实现了事件处理程序?例如,如果您扩展了一个适配器 class,那么请确保您使用了正确的方法签名。确保每个事件处理方法都是 public void,名称拼写正确且参数类型正确。"
WorkloadFactor wf = new WorkloadFactor();
wf.setVisible(true);
说白了,这不会显示任何东西。请理解,WorkloadFactor 扩展了 JPanel,并且像所有非顶级组件一样,必须将其放入最终由顶级 window 持有的容器中才能显示。看看你是如何在你的 main 方法中显示它的——你首先把它放入一个 JFrame,然后显示那个 JFrame。如果您想在按下按钮时显示它,您必须做同样的事情——您需要将它放入 JPanel 或由 JFrame 或 JDialog 或 JOptionPane 持有的其他容器中。
制作一个 JFrame 并在其中添加一个 JButton,然后在按钮中添加动作侦听器并在其中添加以下代码:
这段代码制作了一个带有按钮的框架,当按下按钮时,新的 window 被打开。
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);
}
}
新窗口代码:
public class newWindow extends JFrame {
newWindow() {
super("title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setVisible(true);
}
}