首页 > 解决方案 > 如何使用单独类中第二个 JFrame 中的按钮按下作为主类中的操作

问题描述

所以对于学校来说,我们必须制作 2 个相互交互的独立 JFrame。在第一个 JFrame 中,按下一个按钮会打开第二个 JFrame,其中可以填写名称、速度和位置。

当按下OK第二个 JFrame 时,我保存了填充的文本和数字,但我不知道如何在第一个 JFrame 的代码中使用它们。如果按下了“确定”按钮,我曾尝试使用第二个 JFrame 中的“getter”来检查第一个 JFrame。但这会在打开窗口后立即进行检查。这意味着它不是真的,它不会再次检查它。

语境:

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

public class TourFrame extends JFrame implements ActionListener{
    private Etappe etappe;
    private JLabel jlAantal;
    private JTextField jtfAantal;
    private JButton knopPrint;
    private JButton knopStap;
    private JButton knopVoegFietsenToe;
    private JButton knopVoegCustomFietsToe;

    public TourFrame(Etappe etappe){
        this.etappe = etappe;
        setTitle("Tour de Windesheim: " + etappe.toString());
        setSize(650, 550);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jlAantal = new JLabel("aantal:");
        add(jlAantal);
        jtfAantal = new JTextField(10);
        add(jtfAantal);
        knopPrint = new JButton("print");
        add(knopPrint);
        knopPrint.addActionListener(this);
        knopStap = new JButton("stap");
        add(knopStap);
        knopStap.addActionListener(this);
        knopVoegFietsenToe = new JButton("voeg fietsen toe");
        add(knopVoegFietsenToe);
        knopVoegFietsenToe.addActionListener(this);
        knopVoegCustomFietsToe = new JButton("voeg custom fiets toe");
        add(knopVoegCustomFietsToe);
        knopVoegCustomFietsToe.addActionListener(this);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == knopPrint){
            etappe.print();
        } else if(e.getSource() == knopStap){
            etappe.stap();
            setTitle("Tour de Windesheim: " + etappe.toString());
        } else if(e.getSource() == knopVoegFietsenToe){
            try {
                int aantal = Integer.parseInt(jtfAantal.getText());
                for(int i = 0; aantal > i; i++){
                    Fiets tijdelijk = new Fiets();
                    etappe.voegDeelnemerToe(tijdelijk);
                }
            } catch (NumberFormatException nfe){
                jlAantal.setText("Voer een getal in");
            }
        } else if(e.getSource() == knopVoegCustomFietsToe){
            FietsDialoog fietsdialoog = new FietsDialoog();
        }
    }
}

第二个看起来如下:

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

public class FietsDialoog extends JFrame implements ActionListener {
    private JLabel jlNaam;
    private JTextField jtfNaam;
    private JLabel jlStartPositie;
    private JTextField jtfStartPositie;
    private JLabel jlSnelheid;
    private JTextField jtfSnelheid;
    private JButton knopOk;
    private JButton knopCancel;
    private String naam;
    private int startpositie;
    private int snelheid;
    private boolean ok;
    private boolean cancel;

    public FietsDialoog(){
        setTitle("FietsDialoog");
        setSize(600, 100);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(HIDE_ON_CLOSE);

        jlNaam = new JLabel("naam");
        add(jlNaam);
        jtfNaam = new JTextField(10);
        add(jtfNaam);
        jlStartPositie = new JLabel("startpositie");
        add(jlStartPositie);
        jtfStartPositie = new JTextField(10);
        add(jtfStartPositie);
        jlSnelheid = new JLabel("snelheid");
        add(jlSnelheid);
        jtfSnelheid = new JTextField(10);
        add(jtfSnelheid);
        knopOk = new JButton("ok");
        add(knopOk);
        knopOk.addActionListener(this);
        knopCancel = new JButton("cancel");
        add(knopCancel);
        knopCancel.addActionListener(this);
        setVisible(true);
    }

    public String getNaam() {
        return naam;
    }
    public int getStartpositie() {
        return startpositie;
    }
    public int getSnelheid() {
        return snelheid;
    }
    public boolean isOk() {
        return ok;
    }
    public boolean isCancel() {
        return cancel;
    }
    public JButton getKnopOk() {
        return knopOk;
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == knopOk){
            this.naam = jtfNaam.getText();
            this.startpositie = Integer.parseInt(jtfStartPositie.getText());
            this.snelheid = Integer.parseInt(jtfSnelheid.getText());
            this.ok = true;
            this.cancel = false;


        } else if(e.getSource() == knopCancel){
            this.ok = false;
            this.cancel = true;
            dispose();
        }
    }
}

标签: javaswingjframe

解决方案


尝试在关闭窗口后从课堂上打印fietsdialoog.getNaam()fietsdialoog.getStartpositie()...等。getterfietsdialoog

另外,不要处理窗口:使用setVisibleto falseJFrame.setVisible(true/false);


推荐阅读