gpt4 book ai didi

java - 使用条件配置模态对话框

转载 作者:行者123 更新时间:2023-12-02 05:44:33 25 4
gpt4 key购买 nike

我有一个模态 jDialog,我希望在使用 JOptionPane 在另一个对话框中显示错误消息后满足特定条件时进行处理。我尝试在 JOptionPane 对话框之后使用 dispose() 方法,但我的模式对话框仍然打开。我的代码的相关部分如下:

    import java.awt.Component;
import java.sql.*;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class ReviewPatients extends javax.swing.JDialog {

public ReviewPatients(java.awt.Frame parent, boolean modal) {
super(parent, modal);

jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
"Name", "Address", "Number"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Integer.class
};
boolean[] canEdit = new boolean [] {
false, false, false
};

public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 1012, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 526, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);

pack();


jScrollPane1.setVisible(false);

e:
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3307/doctor","root","Pranav123");
String query="SELECT * FROM records_table WHERE Name LIKE 'some_name';";
Statement st = con.createStatement();
ResultSet rs= st.executeQuery(query);



DefaultTableModel tmodel = (DefaultTableModel) jTable1.getModel();

//Clearing the table
int rows=tmodel.getRowCount();
while(rows>0)
{
tmodel.removeRow(0);
rows--;
}
jTable1.setModel(tmodel);

while(rs.next())
{

//Putting data into table
tmodel.addRow(new Object[] {rs.getString(1),rs.getString(2),rs.getInt(4)});
jTable1.setModel(tmodel);
}

}
catch(Exception e)
{
System.out.println("Error: "+e);
}

if(jTable1.getRowCount()==0)
{
JOptionPane.showMessageDialog(this, "No records exist!");
dispose();
break e;
}



//Showing data
jScrollPane1.setVisible(true);


}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
ReviewPatients dialog = new ReviewPatients(new javax.swing.JFrame(), true);
dialog.setVisible(true);
}
});
}

e 是我在发生错误时用来退出 block 的标签。任何帮助将不胜感激。

最佳答案

JOptionPane 中的所有静态方法都会创建模式对话框,即,代码的执行将停止,直到用户关闭对话框。如果要创建非模态对话框,可以直接使用JDialog。引用Java Swing Tutorial了解更多信息。

更新:

如果我没记错的话,您要做的就是在没有记录时完全显示ReviewPatients对话框。如果是这种情况,最简单的解决方案就是将 dispose() 替换为 System.exit(1)

更好的解决方案是检查数据库中是否有记录,并且:

  • 如果有记录,请创建 ReviewPatients 对话框并使用数据填充表格。
  • 如果没有记录,则显示JOptionPane,通知用户没有记录,并终止程序。

另外注意:尽管允许,但尽量不要将 AWT 组件与 Swing 组件混合使用(请参阅 another Stack Overflow answer for the reasons )。

关于java - 使用条件配置模态对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218516/

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