【问题标题】:How do you launch a window from a main window using a button [duplicate]如何使用按钮从主窗口启动窗口[重复]
【发布时间】:2018-04-02 02:14:11
【问题描述】:

所以我目前正在为我大学的一个班级做一个项目,但我遇到了一个问题。我才大二,所以我还不足以了解高级方法或任何东西,但现在我们正在构建一个显示带有 2 个按钮的窗口的程序。一个按钮启动贷款计算器,另一个按钮启动 401k 计算器。我已经将两个计算器的程序制作为单独的类/.java 文件,并且需要制作第三个主文件,当您单击一个按钮时,它会打开两个窗口之一。如何使用按钮从现有窗口启动新窗口?

每个类都有一个 start 和 main 方法,是这个问题吗?这三个文件中的每一个都自行启动并正确显示窗口,但我无法将两个计算器绑定到最初的 2 按钮选择窗口。

【问题讨论】:

  • 您在寻找 Swing 答案还是 JavaFX?你的观点是用 FXML 完成的吗?
  • 很遗憾地说我不知道​​ FXML 是什么,谢谢大家的回答。我将删除窗口的想法,并像我们经常做的那样通过终端来完成整个事情,我只是想通过制作弹出窗口菜单版本来挑战自己。我一直在寻找 javaFX,因为我没有选择尝试摇摆,但我会接受摇摆的答案,因为我打算很快尝试一下。

标签: java javafx


【解决方案1】:

您将拥有一个带有一个 Main 方法的基类,它将实例化其他类。您可以将您的按钮添加到此窗口,这些按钮将启动其他窗口。查看 cmets:

public class Main {

    public static void main(String[] args) {

        //Main window and panel
        JFrame mainWindow = new JFrame();
        JPanel mainPanel = new JPanel();

        //The calculator classes
        FourZeroOneCalc fourCalc = new FourZeroOneCalc();
        LoanCalc lc = new LoanCalc();

        //
        mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add a button for each and a listener on each button that opens the calculator windows
        JButton launchFourCalc = new JButton("401k Calculator");
        launchFourCalc.addActionListener(e->{
            fourCalc.setVisible(true);
        });
        JButton launchLoanCalc = new JButton("Loan Calculator");
        launchLoanCalc.addActionListener(e->{
            lc.setVisible(true);
        });

        //Add everything to the main window and show it
        mainPanel.add(launchLoanCalc);
        mainPanel.add(launchFourCalc);
        mainWindow.add(mainPanel);
        mainWindow.pack();
        mainWindow.setVisible(true);

    }

}

贷款计算器和401k计算器是这样的:

//This class would be the same as your existing class but it extends JFrame so it can be opend as a window
public class FourZeroOneCalc extends JFrame{
    private static final long serialVersionUID = 1L;
    //constructor has to handle the UI stuff, and anything else your existing class does
    public FourZeroOneCalc(){
        //UI stuff that you probably already had in your existing program
        JPanel panel = new JPanel();
        JLabel l = new JLabel("401k Calcluator");
        panel.add(l);
        this.add(panel);
        this.pack();

    }
    //Additional methods etc. that your existing class has
}

【讨论】:

  • 问题标记为 JavaFX,但这是基于 Swing 的解决方案,因此它可能只会让提问者感到困惑。 Swing 的完美解决方案 :-)
  • 你是对的,我的错!我没有注意到 JavaFX 的标签,只是假设 OP 在一个倾向于使用摇摆的介绍课程中。我需要更仔细地阅读!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多