Java-Swing表单在被调用时显示为空
我得到一个鼠标点击事件,当点击时调用并显示一个新的JFrame表单。但是,当我单击时,表单显示,其中没有任何元素。在我的项目中有两个这种类型的事件,我用相同的机制处理它们。第一个很好用,但第二个有问题。我也使用pack(),但问题仍然存在。谁能告诉我怎么解决这个问题吗?谢谢!我的项目是用越南语写的,所以如果有人想在代码或UI中提及任何元素,只需写它而不带任何符号就足够了 以下是事件处理程序:Java-Swing表单在被调用时显示为空,java,swing,Java,Swing,我得到一个鼠标点击事件,当点击时调用并显示一个新的JFrame表单。但是,当我单击时,表单显示,其中没有任何元素。在我的项目中有两个这种类型的事件,我用相同的机制处理它们。第一个很好用,但第二个有问题。我也使用pack(),但问题仍然存在。谁能告诉我怎么解决这个问题吗?谢谢!我的项目是用越南语写的,所以如果有人想在代码或UI中提及任何元素,只需写它而不带任何符号就足够了 以下是事件处理程序: //The first event private void tblClientResultMouse
//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();
}
它是如何发生的:
预期结果:
欢迎来到“亲爱的,我已经阻止了事件调度线程(现在什么都不起作用)”的精彩世界 鼠标事件(像所有基于GUI的事件)都是在EDT的上下文中传递的,所以做一些类似
private void tblTruyenResultMouseClicked(java.awt.event.MouseEvent evt) {
//....
while (infoFrm.isVisible()) {
}
}
将阻止EDT并阻止任何事件的进一步处理,包括绘制事件,基本上会挂起程序
我建议你从阅读开始,对整个问题有一个更深入的了解
要解决您的问题,您需要使用模式对话框,该对话框将在对话框可见时等待,并在关闭后继续执行
看一看
这是一个重要的教训,因为您永远不应该从顶级容器(如JFrame
)开始,而是将所有GUI基于JPanel
之类的内容,这样您就可以更自由地决定何时以及如何显示这些组件
<>表格编辑不会教你制作可重用或自给代码的技术,我强烈建议你考虑花些时间手工编码它们。 < P>欢迎来到“亲爱的,我阻止了事件调度线程(现在没有工作)”的世界: 鼠标事件(像所有基于GUI的事件)都是在EDT的上下文中传递的,所以做一些类似
private void tblTruyenResultMouseClicked(java.awt.event.MouseEvent evt) {
//....
while (infoFrm.isVisible()) {
}
}
将阻止EDT并阻止任何事件的进一步处理,包括绘制事件,基本上会挂起程序
我建议你从阅读开始,对整个问题有一个更深入的了解
要解决您的问题,您需要使用模式对话框,该对话框将在对话框可见时等待,并在关闭后继续执行
看一看
这是一个重要的教训,因为您永远不应该从顶级容器(如JFrame
)开始,而是将所有GUI基于JPanel
之类的内容,这样您就可以更自由地决定何时以及如何显示这些组件
表单编辑器不会教你产生可重用或自包含代码的技巧,我强烈建议你考虑花一些时间手工编码。这看起来有点忙<代码>(iFifrm,ISVISILULL()){}“ScYouDouBAT”,因为当调用的表单不再可见时,我希望这个事件继续下去,但是这会循环消耗你的CPU的100%,也许为什么窗体永远不会显示——考虑增加100毫秒的睡眠。loop@ScaryWombat我添加了
Thread.sleep(100)
但仍然不起作用这看起来有点忙而(infoFrm.isVisible()){}“ScYouDouBAT”,因为当调用的表单不再可见时,我希望这个事件继续下去,但是这会循环消耗你的CPU的100%,也许为什么窗体永远不会显示——考虑增加100毫秒的睡眠。loop@ScaryWombat我添加了Thread.sleep(100)
但仍然不起作用,我在等待@MadProgrammer用facts@ScaryWombat啊,但是你做得太好了,你在等待@MadProgrammer来取代我的疯狂猜测facts@ScaryWombat啊,但是你做得太好了