gpt4 book ai didi

Java - Swing 表单在被调用时显示为空

转载 作者:行者123 更新时间:2023-12-01 20:10:00 28 4
gpt4 key购买 nike

我得到了一个鼠标单击事件,单击时调用并显示一个新的 JFrame 表单。但是当我单击时,会显示表单,其中没有任何元素。我的项目中有 2 个此类事件,我使用相同的机制处理它们。第一个完美,但第二个就有问题了。我也使用 pack() 但问题仍然存在。有人能告诉我如何解决这个问题吗?多谢!我的项目是越南语的,所以如果有人想提及代码或 UI 中的任何元素,只需不加任何符号就可以了!

以下是事件处理程序:

//The first event

private void tblClientResultMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
DefaultTableModel dm = (DefaultTableModel) tblClientResult.getModel();
int row = tblClientResult.getSelectedRow();
int col = tblClientResult.getSelectedColumn();

if (col == 7) {
SearchTruyenFrm searchTruyenFrm = new SearchTruyenFrm(listKH.get(row));
searchTruyenFrm.setVisible(true);
}
}


//The second one

private void tblTruyenResultMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
DefaultTableModel dm = (DefaultTableModel) tblTruyenResult.getModel();
int row = tblTruyenResult.getSelectedRow();
int col = tblTruyenResult.getSelectedColumn();

if (col == 6) {
MuonTruyen muonTruyen = new MuonTruyen();
muonTruyen.setTruyen(listTruyen.get(row));
muonTruyen.setPhieuMuon(phieuMuon);

//Trouble here (?)
ThueTruyenInfoFrm infoFrm = new ThueTruyenInfoFrm(listTruyen.get(row));
infoFrm.setVisible(true);

while (infoFrm.isVisible()) {

}

muonTruyen.setDieuKien(infoFrm.getTxtDieuKien().getText());
muonTruyen.setGiaMuon(Float.parseFloat(infoFrm.getTxtGiaThue().getText()));
muonTruyen.setTienPhat(0);
muonTruyen.setPaid(false);
}
}

构造函数内部:

public ThueTruyenInfoFrm(Truyen selected) {
initComponents();

txtTenTr.setText(selected.getTen());
txtTacGia.setText(selected.getTacGia());
pack();
}

它是如何发生的: how the trouble goes

期望的结果: enter image description here

最佳答案

欢迎来到“亲爱的,我已经阻止了事件调度线程(现在没有任何作用)”的奇妙世界

鼠标事件(像所有基于 GUI 的事件一样)是在 EDT 的上下文中传递的,因此执行类似...

private void tblTruyenResultMouseClicked(java.awt.event.MouseEvent evt) {                                             
//....
while (infoFrm.isVisible()) {
}
}

将阻止 EDT 并阻止任何进一步的事件处理,包括绘制事件,基本上挂起您的程序。

我建议您首先阅读 The Event Dispatch Thread全面了解整个问题。

为了解决您的问题,您将需要使用模式对话框,该对话框将在对话框可见时等待,并在对话框关闭后继续执行。

看看How to make dialogs .

这是一个重要的教训,因为您永远不应该从顶级容器(例如 JFrame)开始,而应该将所有 GUI 建立在 JPanel 之类的基础上相反,这使您可以更自由地决定何时以及如何显示这些组件。

表单编辑器不会教您生成可重用或自包含代码的技术,我强烈建议您考虑花一些时间手动编码。

关于Java - Swing 表单在被调用时显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803572/

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