Java JTable行选择和数据检索
这是我第一次创建一个程序,它将连接到数据库以获取数据并将其放入Java JTable行选择和数据检索,java,swing,jtable,Java,Swing,Jtable,这是我第一次创建一个程序,它将连接到数据库以获取数据并将其放入JTable 现在的问题是我想从上表中选择一行,并在指定的JTextFields中显示结果 我已经尝试过谷歌提供的很多搜索结果,但我仍然不知道怎么做 以下是该程序的完整源代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.table.*; public class Mala
JTable
现在的问题是我想从上表中选择一行,并在指定的JTextFields中显示结果
我已经尝试过谷歌提供的很多搜索结果,但我仍然不知道怎么做
以下是该程序的完整源代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.table.*;
public class MalayaUniversityEnrollment extends JFrame //implements ActionListener
{
JLabel header = new JLabel ("MALAYA UNIVERSITY ENROLLMENT SYSTEM");
JLabel searchHeader = new JLabel ("SEARCH A STUDENT ");
JLabel infoHeader = new JLabel ("STUDENT INFORMATION");
JButton addButton = new JButton ("ENROLL STUDENT");
JButton editButton = new JButton ("EDIT INFO");
JButton deleteButton = new JButton ("DELETE STUDENT");
JButton searchButton = new JButton ("SEARCH IT!");
JButton clearButton = new JButton ("CLEAR ALL FIELDS");
JTextField studentIDField = new JTextField();
JTextField lastNameField = new JTextField();
JTextField firstNameField = new JTextField();
JTextField middleInitialField = new JTextField();
JTextField CYSField = new JTextField();
JTextField tuitionField = new JTextField();
JTextField statusField = new JTextField();
JTextField searchField = new JTextField();
JLabel studentIDLabel = new JLabel ("Student ID Number: ");
JLabel lastNameLabel = new JLabel ("Last Name: ");
JLabel firstNameLabel = new JLabel ("First Name: ");
JLabel middleInitialLabel = new JLabel ("Middle Initial: ");
JLabel CYSLabel = new JLabel ("CYS: ");
JLabel tuitionLabel = new JLabel ("Semestral Tuition: ");
JLabel statusLabel = new JLabel ("Status: ");
private final JTable table = new JTable();
private final JScrollPane scrollPane = new JScrollPane();
String SID ="";
String lastName="";
String firstName="";
String middleInitial="";
String CYS="";
Double semestralTuition=0.00;
String studentStatus="";
String[] headers = {"Student ID", "Last Name", "First Name", "Middle Initial","CYS", "Semestral Tuition", "Status"};
DefaultTableModel model = new DefaultTableModel();
public MalayaUniversityEnrollment()
{
super ("Malaya University [Enrollment]");
Container c = getContentPane();
c.setLayout(null);
c.add(header);
header.setBounds(290,20,1000,35);
header.setFont(new Font("Tahoma", Font.PLAIN, 35));
c.add(addButton);
c.add(editButton);
c.add(deleteButton);
c.add(searchButton);
c.add(clearButton);
c.add(searchHeader);
c.add(infoHeader);
c.add(studentIDField);
c.add(lastNameField);
c.add(firstNameField);
c.add(middleInitialField);
c.add(CYSField);
c.add(tuitionField);
c.add(statusField);
c.add(searchField);
c.add(studentIDLabel);
c.add(lastNameLabel);
c.add(firstNameLabel);
c.add(middleInitialLabel);
c.add(CYSLabel);
c.add(tuitionLabel);
c.add(statusLabel);
studentIDLabel.setBounds(50,575,100,30);
lastNameLabel.setBounds(50,615,100,30);
firstNameLabel.setBounds(50,660,100,30);
middleInitialLabel.setBounds(50,700,100,30);
studentIDField.setBounds(175,575,200,30);
lastNameField.setBounds(175,615,200,30);
firstNameField.setBounds(175,660,200,30);
middleInitialField.setBounds(175,700,200,30);
CYSLabel.setBounds(450,575,100,30);
tuitionLabel.setBounds(450,615,100,30);
statusLabel.setBounds(450,660,100,30);
CYSField.setBounds(575,575,200,30);
tuitionField.setBounds(575,615,200,30);
statusField.setBounds(575,660,200,30);
infoHeader.setBounds(270,525,500,50);
infoHeader.setFont(new Font("Tahoma", Font.PLAIN, 30));
searchField.setBounds(885,638,300,30);
searchHeader.setBounds(895,575,300,50);
searchHeader.setFont(new Font("Tahoma", Font.PLAIN, 30));
searchButton.setBounds(938,688,200,23);
addButton.setBounds(450,700,146,23);
editButton.setBounds(630,700,146,23);
deleteButton.setBounds(450,733,146,23);
clearButton.setBounds(630,733,146,23);
studentIDField.setHorizontalAlignment(JTextField.CENTER);
lastNameField.setHorizontalAlignment(JTextField.CENTER);
firstNameField.setHorizontalAlignment(JTextField.CENTER);
middleInitialField.setHorizontalAlignment(JTextField.CENTER);
CYSField.setHorizontalAlignment(JTextField.CENTER);
tuitionField.setHorizontalAlignment(JTextField.CENTER);
statusField.setHorizontalAlignment(JTextField.CENTER);
searchField.setHorizontalAlignment(JTextField.CENTER);
scrollPane.setBounds(50, 88, 1190, 412);
getContentPane().add(scrollPane);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setShowGrid(true);
model.setColumnIdentifiers(headers);
table.setModel(model);
scrollPane.setViewportView(table);
JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new HeaderRenderer(table));
table.getTableHeader().setReorderingAllowed(false);
setSize(1300,825);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
for (int y=0; y<7; y++)
{
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(y).setCellRenderer( centerRenderer );
}
RetrieveData();
}
private static class HeaderRenderer implements TableCellRenderer
{
DefaultTableCellRenderer renderer;
public HeaderRenderer(JTable table)
{
renderer = (DefaultTableCellRenderer)
table.getTableHeader().getDefaultRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int col)
{
return renderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, col);
}
}
public void RetrieveData()
{
try
{
int x=0;
String query = "Select * FROM `2013-2014 enrollment`";
DatabaseConfig a = new DatabaseConfig();
ResultSet rs = a.showR(query);
while(rs.next())
{
SID = rs.getString("Student_ID");
lastName = rs.getString("Last_Name");
firstName = rs.getString("First_Name");
middleInitial = rs.getString("Middle_Initial");
CYS = rs.getString("CYS");
semestralTuition = rs.getDouble("Semestral_Tuition");
studentStatus = rs.getString("Status");
model.addRow(new Object[]{SID,lastName,firstName,middleInitial,CYS,semestralTuition,studentStatus});
x++;
System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4) + " " + rs.getString(5) + " " + rs.getString(6) + " " + rs.getString(7));
}
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, "There is an error.");
}
}
public static void main (String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception exe)
{
System.out.println("ERROR: Could not Load System UI.");
}
new MalayaUniversityEnrollment();
}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.sql.*;
导入javax.swing.table.*;
公共类MalayaUniversityEnrollment扩展了JFrame//implements ActionListener
{
JLabel header=新的JLabel(“马来亚大学招生系统”);
JLabel searchHeader=新JLabel(“搜索学生”);
JLabel infoHeader=新的JLabel(“学生信息”);
JButton addButton=新JButton(“注册学生”);
JButton editButton=新JButton(“编辑信息”);
JButton deleteButton=新JButton(“删除学生”);
jbuttonsearchbutton=新JButton(“搜索它!”);
JButton clearButton=新JButton(“清除所有字段”);
JTextField studentIDField=新的JTextField();
JTextField lastNameField=新的JTextField();
JTextField firstNameField=新的JTextField();
JTextField middleInitialField=新的JTextField();
JTextField CYSField=新的JTextField();
JTextField tutionfield=新的JTextField();
JTextField statusField=新的JTextField();
JTextField searchField=新的JTextField();
JLabel studentIDLabel=新JLabel(“学生ID号:”);
JLabel lastnamelab=新JLabel(“姓氏:”);
JLabel firstnamelab=新的JLabel(“名字:”);
JLabel middleInitialLabel=新的JLabel(“中间首字母:”);
JLabel CYSLabel=新JLabel(“CYS:”);
JLabel学费标签=新的JLabel(“学期学费:”);
JLabel statusLabel=新的JLabel(“状态:”);
私有最终JTable表=新JTable();
私有最终JScrollPane scrollPane=新JScrollPane();
字符串SID=“”;
字符串lastName=“”;
字符串firstName=“”;
字符串首字母=”;
字符串CYS=“”;
双semestraluition=0.00;
字符串studentStatus=“”;
字符串[]头={“学生ID”、“姓氏”、“名字”、“中间首字母”、“CYS”、“学期学费”、“状态”};
DefaultTableModel=新的DefaultTableModel();
马来西亚公立大学
{
超级(“马来亚大学[招生]”);
容器c=getContentPane();
c、 setLayout(空);
c、 添加(标题);
标题.立根(290,201000,35);
header.setFont(新字体(“Tahoma”,Font.PLAIN,35));
c、 添加(添加按钮);
c、 添加(编辑按钮);
c、 添加(删除按钮);
c、 添加(搜索按钮);
c、 添加(clearButton);
c、 添加(搜索标题);
c、 添加(信息头);
c、 增加(学生领域);
c、 添加(lastNameField);
c、 添加(firstNameField);
c、 添加(初始值字段);
c、 添加(CYSField);
c、 添加(TutionField);
c、 添加(状态字段);
c、 添加(搜索字段);
c、 添加(studentIDLabel);
c、 添加(lastNameLabel);
c、 添加(firstnamelab);
c、 添加(初始标签);
c、 添加(CYSLabel);
c、 添加(学费标签);
c、 添加(状态标签);
学生标签立根数(50575100,30);
lastNameLabel.setBounds(50615100,30);
firstNameLabel.setBounds(50660100,30);
中间初始标签.立根(50700100,30);
学生领域立根(175575200,30);
lastNameField.setBounds(175615200,30);
firstNameField.setBounds(175660200,30);
米德尔菲尔德.立根(175700200,30);
西斯拉贝尔立根(450575100,30);
学费标签.立根(450615100,30);
statusLabel.setBounds(450660100,30);
西斯菲尔德挫折基金会(575575200,30);
退步(575615200,30);
statusField.setBounds(575660200,30);
infoHeader.setBounds(270525500,50);
setFont(新字体(“Tahoma”,Font.PLAIN,30));
searchField.setBounds(885638300,30);
searchHeader.setBounds(895575300,50);
searchHeader.setFont(新字体(“Tahoma”,Font.PLAIN,30));
searchButton.setBounds(938688200,23);
addButton.立根(450700146,23);
editButton.setBounds(630700146,23);
deleteButton.setBounds(450733146,23);
clearButton.立根(63073146,23);
studentIDField.setHorizontalAlignment(JTextField.CENTER);
setHorizontalAlignment(JTextField.CENTER);
firstNameField.setHorizontalAlignment(JTextField.CENTER);
middleInitialField.setHorizontalAlignment(JTextField.CENTER);
CYSField.setHorizontalAlignment(JTextField.CENTER);
tutionfield.setHorizontalAlignment(JTextField.CENTER);
statusField.setHorizontalAlignment(JTextField.CENTER);
searchField.setHorizontalAlignment(JTextField.CENTER);
滚动窗格.立根(50,88,1190412);
getContentPane().add(滚动窗格);
表.setSelectionMode(ListSelectionModel.SINGLE_选择);
表.设置显示网格(真);
model.setColumnIdentifiers(标题);
表2.setModel(model);
scrollPane.setViewportView(表);
JTableHeader=table.getTableHeader();
header.setDefaultRenderer(新的HeaderRenderer(表));
table.getTableHeader().setReorderingAllowed(false);
设置大小(1300825);
setVisible(真);
setDefaultCloseOperation(关闭时退出);
setLocationRelativeTo(空);
对于(int y=0;y,请阅读上Swing教程中的部分
当选择更改时,您将获得当前选定的行。然后,您可以使用table.getValueAt(…)方法为每个文本字段显示文本字段中的数据
另外,不要使用setBounds()。Swing设计用于布局管理器。本教程还有一节关于布局管理器的内容,您可以阅读以了解更多信息。阅读上Swing教程中的部分
当选择更改时,您将获得当前选定的行。然后,您可以使用table.getValueAt(…)方法为每个文本字段显示文本字段中的数据
另外,不要使用setBounds()。Swing设计用于布局管理器。本教程还有一个章节
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int selectedRow = table.getSelectedRow();
String sid = (String)table.getValueAt(selectedRow, 0);
studentIDField.setText(sid);
}
});