gpt4 book ai didi

java - 为什么我的 head id 没有在 swing 表单中显示数据库中的下一个自动 id?如何对必填字段进行编码?

转载 作者:行者123 更新时间:2023-11-30 09:11:27 25 4
gpt4 key购买 nike

我已将自动生成 ID 设置为表单,它工作正常。但是,我希望在打开表单时 ID 应该显示在框架上,目前每次打开表单时它都显示为零。

我可以知道为什么它不起作用吗?在注册表中设置必填字段需要什么样的代码。 “如果必填字段为空,则不应保存详细信息。提前致谢。

enter image description here

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import net.java.dev.designgridlayout.DesignGridLayout;
import java.sql.*;

class databaseprob {

JFrame JF;
Container C,C1;
JDesktopPane JDP;
JInternalFrame JIF5;
JLabel i1l1,i1l2;
JTextField i1t1;
JRadioButton i1r1,i1r2,i1r3,i1r4;
JButton i1b1,i1b2,i1b3;
JInternalFrame JIF1;
ButtonGroup i1bg;
String i1type;
int i1id;

public databaseprob() {
JF = new JFrame();
JDP = new JDesktopPane();
JF.setVisible(true);
JF.pack();

JIF1 = new JInternalFrame("Register",true,true, true, true);
C = JF.getContentPane();
C.add(JDP,BorderLayout.CENTER);
JIF1.setVisible(true);
JIF1.setBounds(10, 10, 600, 500);
C1 = JIF1.getContentPane();
DesignGridLayout layout = new DesignGridLayout(C1);

i1l1 = new JLabel("Head ID : ");
i1l2 = new JLabel("Type : ");

i1t1 = new JTextField(10);
i1t1.setEnabled(false);
i1t1.setText(String.valueOf(i1id));

ActionListener actionListener = new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
JRadioButton radioButton = (JRadioButton)e.getSource();
i1type = radioButton.getText();
System.out.println(i1type);
}
};

i1bg = new ButtonGroup();

i1r1 = new JRadioButton("Customer");
i1r1.addActionListener(actionListener);
i1bg.add(i1r1);

i1r2 = new JRadioButton("Supplier");
i1r2.addActionListener(actionListener);
i1bg.add(i1r2);

i1r3 = new JRadioButton("Staff");
i1r3.addActionListener(actionListener);
i1bg.add(i1r3);

i1r4 = new JRadioButton("Others");
i1r4.addActionListener(actionListener);
i1bg.add(i1r4);

i1b1 = new JButton("Save");
i1b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection i1conn = DriverManager.getConnection("Jdbc:Odbc:TomsJava");
Statement i1stmt = i1conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet i1rs = i1stmt.executeQuery("SELECT * FROM i1Register");
int id=0;
while(i1rs.next()) {
id = i1rs.getInt("Head_ID");
}
System.out.println(id);
i1id = id+1;

i1rs.moveToInsertRow();
i1rs.updateInt("Head_ID",i1id);
i1rs.updateString("Type",i1type);
i1rs.insertRow();
i1stmt.close();
i1rs.close();
} catch(SQLException e) {
System.out.println(e);
} catch(ClassNotFoundException z) {
System.out.println(z);
} catch(NumberFormatException n) {
System.out.println(n);
}

JIF1.dispose();
}
});

i1b2 = new JButton("Reset");
i1b3 = new JButton("Close");

layout.row().grid(i1l1).add(i1t1);
layout.row().grid(i1l2).add(i1r1).add(i1r2).add(i1r3).add(i1r4);
layout.emptyRow();
layout.row().center().add(i1b1).add(i1b2).add(i1b3);

JDP.add(JIF1);
}

public static void main(String args[]) {
new databaseprob();
}
}

最佳答案

Why my head id is not displaying the next automatic id from the database in the swing form?

这是因为您只是在按下保存按钮时更新了文本字段。获取最后一个 ID 和更新数据库记录的代码都在 actionPerformed 方法中:

i1b1.addActionListener(new ActionListener() {
@Override // always use Override annotation
public void actionPerformed(ActionEvent ae) {
// all is done here
}
};

在显示内部框架之前,您需要执行数据库调用以将下一个 ID 设置为 i1t1 文本字段。

How to code mandatory fields?

视情况而定。一种方法是使用一种方法来验证所有必填字段是否已填写。例如:

private boolean validateMandatoryFields() {
return !i1t1.getText().isEmpty() && selectedOption != null;
}

selectedOption 应该是一些变量或类成员,用于保存在单选按钮组上选择的类型。然后修改 i1b1 按钮的 Action 监听器以根据此验证结果执行更新:如果 true 执行更新,否则向用户显示一些警告。

请注意,如果您为组件提供默认值,那么您就可以摆脱验证。在这种特殊情况下,如果您默认选择一个单选按钮(比如说 i1r4),那么您不需要任何验证,因为 i1t1 将具有数据库中的下一个 ID按照我之前的建议。

题外话

我知道您交付项目的时间不多了,但下次您必须考虑使用 SwingWorker 执行数据库调用和 Swing 组件更新。 .这是因为必须在 Event Dispatch Thread 中处理 Swing 组件的创建/更新。这是一个单线程,数据库调用或 IO 操作等耗时任务可能会阻塞该线程,导致您的 GUI 变得无响应。您可以在此官方文档中阅读有关 Swing 中并发性的更多信息:Lesson: Concurrency in Swing

关于java - 为什么我的 head id 没有在 swing 表单中显示数据库中的下一个自动 id?如何对必填字段进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088796/

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