gpt4 book ai didi

java - 创建新的 JFrame 然后关闭后继续执行代码

转载 作者:行者123 更新时间:2023-11-30 07:53:16 29 4
gpt4 key购买 nike

所以这可能是一个愚蠢的问题,但我就是无法弄清楚。基本上我有我的 MainWindow,当我按下按钮时,应该会出现一个名为 PartSelectionWindow 的新窗口,其中包含 JTable(JTable 填充有自定义表模型)。然后我选择一行并按“确定”返回主窗口并使用所选的信息。问题是这样的:

如果我对 PartSelectionWindow 使用 JFrame,则窗口关闭后,MainWindow 按钮事件中的代码执行不会继续

如果我使用 JDialog,Jtable 不会填写自定义模型,并且它的按钮不会响应,只能通过单击 JDialog 的 X 来关闭它。就好像它被禁用了一样。调试时,我注意到它确实在关闭 JDialog 后尝试填写表格。我在某处读到这可能是因为在 setVisible 设置为 true 后代码被暂停,所以我尝试在 setVisible 设置为 true 之前将代码填充到 JTable 但它仍然不起作用。

强制代码:

    //MainWindow button event when tryng to use new JFrame
private void btnSetupListActionPerformed(java.awt.event.ActionEvent evt) {
//call to new JFrame
new partsWindow();
//after closing partsWindow the next line of code does NOT execute
txtPartNum.setText(PartsWindow.jpart.getPartNumber());
}

//MainWindow button event when tryng to use new JDialog
private void btnSetupListActionPerformed(java.awt.event.ActionEvent evt) {
//call to new JDialog
new partsDialog(this, true);
//after closing partsWindow the next line of code does NOT execute
txtPartNum.setText(PartsWindow.jpart.getPartNumber());
}

JDialog 窗口的构造函数

public partsDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.setTitle("Setup Material Client");
this.setVisible(true);
this.setLocationRelativeTo(null);
jTable1.getTableHeader().addMouseListener(new partsDialog.ColumnFitAdapter());
jTable1.getTableHeader().setReorderingAllowed(false);
GetBomForSetupMaterial = jtrace.GetBomForSetupMaterial(Main.station);
jTable1.setModel(new PartModel(GetBomForSetupMaterial.getPartPositionList()));
}

如有任何帮助,我们将不胜感激。

最佳答案

为了说明我的评论,您可以使用这样的代码(简化)

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class JDialogTest extends JDialog {
private static final long serialVersionUID = 1L;
private String text;
private JTextField textField;

public JDialogTest(JFrame owner, String text){
super(owner,true);
this.text = text;
init();
}


private void init() {
this.getContentPane().setLayout(new BorderLayout());
JButton btnContinue = new JButton("Close me and continue");
btnContinue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JDialogTest.this.dispose();
}
});
textField = new JTextField();
this.getContentPane().add(new JLabel(text),BorderLayout.NORTH);
this.getContentPane().add(textField,BorderLayout.CENTER);
this.getContentPane().add(btnContinue,BorderLayout.SOUTH);
this.pack();
}

public JTextField getTextField() {
return textField;
}

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setVisible(true);
JDialogTest test = new JDialogTest(frame, "Hello");
System.out.println("I open");
test.setLocationRelativeTo(null);
test.setVisible(true);
System.out.println("Good you closed it value is " + test.getTextField().getText());
frame.setVisible(false);

}

}

我刚刚传递了一些文本以在 JLabel 中结束,您应该传递您的表格或有关如何创建它的信息

关于java - 创建新的 JFrame 然后关闭后继续执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045937/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com