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);


        }
    });