java - 如何使用单独类中第二个 JFrame 中的按钮按下作为主类中的操作
问题描述
所以对于学校来说,我们必须制作 2 个相互交互的独立 JFrame。在第一个 JFrame 中,按下一个按钮会打开第二个 JFrame,其中可以填写名称、速度和位置。
当按下OK
第二个 JFrame 时,我保存了填充的文本和数字,但我不知道如何在第一个 JFrame 的代码中使用它们。如果按下了“确定”按钮,我曾尝试使用第二个 JFrame 中的“getter”来检查第一个 JFrame。但这会在打开窗口后立即进行检查。这意味着它不是真的,它不会再次检查它。
语境:
- 我们被迫使用 2 个单独的 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();
}
}
}
解决方案
尝试在关闭窗口后从课堂上打印fietsdialoog.getNaam()
,fietsdialoog.getStartpositie()
...等。getter
fietsdialoog
另外,不要处理窗口:使用setVisible
to false
。JFrame.setVisible(true/false);
推荐阅读
- vector - 在Qgis中使用rasterize查找点向量数据的频率
- pointers - 我这里有一个指针问题,如果你知道请帮助我
- javascript - 为什么我不能让我的 jquery 在单击按钮时淡入?
- java - Java 和 XON XOFF 串行打印
- java - 错误:缺少表“hibernate_sequence”的 FROM 子句条目
- python - Julia 的 PyCall 包生成分段错误
- java - 无法使用 Azure 服务总线发送消息
- python - 错误:由于 OSError 无法安装软件包:[WinError 5]
- php - 使用 PhpOffice\PhpSpreadsheet 保存大文件导致 504 网关超时
- google-oauth - 如何使用 Google 登录发送定期受保护的请求?