从一个GUI窗口跳转到另一个GUI

时间:2014-09-13 16:55:37

标签: java swing user-interface awt

我正在开发一个java应用程序,它有5个gui窗口,其中一个是问候语或主窗口,我已经完成了所有逻辑部分的工作,我完成了99.99%,唯一剩下的就是我怎么能以这种方式编码,当我点击一个按钮时,让我说一个主窗口上的按钮,它会引导我到第二个窗口,主窗口将自动关闭,我怎么能让它成真吗?

任何帮助将不胜感激。


修改

这是代码先生

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class Nc extends JFrame
{
private JLabel label;
private JLabel label1;
private JLabel label2;
private JLabel label3;
private JLabel label4;
private JButton b;
private JButton o;
private JButton h;
private JButton d;

private Bn ob;
private Hd oh;
private Oc oo;
private Dc od;

public Nc()
{
    setTitle("Number Converter");
    setSize(200 , 300);
    setResizable(false);
    setLocation(500 , 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new FlowLayout(FlowLayout.CENTER, 25, 10));

    label = new JLabel("Number Converter");
    label1 = new JLabel("Java Application");
    label2 = new JLabel("Programmed by: Hassan Zia");
    label3 = new JLabel("Copyright 2014");
    label4 = new JLabel("Click a button");

    b = new JButton("Binary");
    o = new JButton("Octal");
    h = new JButton("Hexa Decimal");
    d = new JButton("Decimal");

    add(label);
    add(label1);
    add(label2);
    add(label3);
    add(label4);

    add(b); // Binary Button
    add(o); // Octal Button
    add(h); // Hexa Decimal Button
    add(d); // Decimal Button

    b.addActionListener(new action());
    o.addActionListener(new action());
    h.addActionListener(new action());
    d.addActionListener(new action());

    setVisible(true);
}

void bnc()
{
    ob = new Bn();
}

void hdc()
{
    oh = new Hd();
}

void occ()
{
    oo = new Oc();
}

void dcc()
{
    od = new Dc();
}

private class action implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == b)
        {
            bnc();
        }
        if (e.getSource() == h)
        {
            hdc();
        }
        if (e.getSource() == o)
        {
            occ();
        }
        if (e.getSource() == d)
        {
            dcc();
        }
    }
}

public static void main (String args[])
{
    Nc obj = new Nc();
}

This is a picture of the app

1 个答案:

答案 0 :(得分:4)

如果这是一个Swing应用程序(您仍然没有告诉我们),那么您可以解决您的直接问题,方法是放入一个JButton的ActionListener代码来调用{ {1}}在当前窗口中,如果您再次使用它,或者setVisible(false),如果您再也不能使用它,然后在您希望的下一个窗口对象上调用dispose()显示。这可以很简单:

setVisible(true)

但仍有一些悬而未决的问题。

  • 再次,这是一个Swing GUI吗?具体的解决方案取决于您正在使用的GUI库。
  • 代码解决方案的细节还将完全取决于您使用的特定代码和程序结构,这些内容您尚未向我们展示。如果您想要更好的答案,请向我们展示代码
  • 再次,我坚持我的建议,尽量减少向用户抛出的窗口,如果可能的话,赞成使用说CardLayout在单个窗口上交换视图,并限制第二窗口用于模态JDialogs(同样多)尽可能)。关于此的一个很好的参考仍然是链接,The Use of Multiple JFrames, Good/Bad Practice?

修改
好的,我已经看到你添加了Swing和AWT标签,谢谢,但我仍然认为我的答案还不完整,因为问题仍然不完整。


修改2

根据您的代码,我会支持我的原始建议,并使用CardLayout来交换JPanel" views"。例如,运行:

myButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
       ThisGuiClass.this.setVisible(false);
       newGUI.setVisible(true);
    }
});

当然,计算JPanels会涉及更多,包含嵌套的JPanels,每个都有自己的布局管理器,JTextFields,JButton以及实现其功能所需的任何其他内容。


编辑3
实际上,在考虑这个问题时,即使这样也是过度的。你最好使用一个带有两个文本字段的JPanel,一个用于数字输入,一个用于结果显示,底部有一堆按钮。然后显示将根据按下哪个按钮(转换类型)而改变。 KISS原则。