Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最佳做法数据库访问-联系人列表_Java_Database_Swing_Jtable_Jlist - Fatal编程技术网

Java 最佳做法数据库访问-联系人列表

Java 最佳做法数据库访问-联系人列表,java,database,swing,jtable,jlist,Java,Database,Swing,Jtable,Jlist,很长一段时间以来,我一直在想,在为这个问题创建一些愚蠢的解决方案的同时,应该如何正确地完成以下工作: 数据表: ID | givenname |姓氏|地址|数据 我想在一个列表框中显示所有givennames+lastnames,在选择一个项目时,我想检索相应数据集的其余部分,并在一些文本框中显示 所以我基本上是这样做的: 1) 查询:从数据表中选择ID、givenname、lastname 2) 创建和ArrayList的“Contact对象”(只是一个具有与DataTable中的列相同的成员

很长一段时间以来,我一直在想,在为这个问题创建一些愚蠢的解决方案的同时,应该如何正确地完成以下工作:

数据表: ID | givenname |姓氏|地址|数据

我想在一个列表框中显示所有givennames+lastnames,在选择一个项目时,我想检索相应数据集的其余部分,并在一些文本框中显示

所以我基本上是这样做的:

1) 查询:从数据表中选择ID、givenname、lastname

2) 创建和ArrayList的“Contact对象”(只是一个具有与DataTable中的列相同的成员的类),我迭代resultset,因此创建了几个ID为、givenname为和lastname为的对象

!!3) 我希望列表框显示givenname+“”+lastname,但在选择“John Doe”时,我希望程序知道这个“John Doe”是arraylist的哪个元素(如果有多个元素),从对象中删除ID并删除他的地址和“数据”

我经常做的事情是“列表框中的第三个约翰·多伊被选中了,让我们在arraylist中寻找第三个约翰·多伊,并向上帝祈祷这是正确的” 这对我来说是非常不必要的

在Java+Swing中有什么可用的解决方案

我希望我能弄清楚我需要什么^^

问候
Billdoor

我想你可以把你的
id
放在一旁。就像在
HTML
中使用标签
,我会:

<option value="id">Jonh Doe</option>
johndoe
属性
value
中的值将是数据库中的实际Id,文本将是
givenname+“”+lastname


这样,我保留了与识别此人相关的信息,并显示了姓名。之后,当用户选择一个项目时,我将从
value
属性中根据
id
检索信息库。

我认为您可以将
id
存储在一旁。就像在
HTML
中使用标签
,我会:

<option value="id">Jonh Doe</option>
johndoe
属性
value
中的值将是数据库中的实际Id,文本将是
givenname+“”+lastname


这样,我保留了与识别此人相关的信息,并显示了姓名。之后,当用户选择一个项目时,我将从
value
属性中检索
id
上的信息库。

您应该创建一个表格模型来保存数据,并创建渲染器(如果需要)来正确呈现数据。有关详细信息,请参阅。然后在表的选择侦听器中,可以检索相关行。您可以使用
TableModel.getValueAt()
或添加助手方法来检索所选数据。下面是一个简单的用户模型示例。应用程序打印所选用户,包括表中不可见的id。模型中有一个方便的方法
getUser()
,用于获取特定行的用户。请注意,您也可以使用
DefaultTableModel
来处理以下简单场景

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.AbstractTableModel;

public class UserTableDemo {

    public UserTableDemo() {
        JFrame frame = new JFrame("UserTable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final UserModel model = new UserModel();
        final JTable table = new JTable();
        table.setModel(model);
        JScrollPane scrollPane = new JScrollPane(table);
        JPanel content = new JPanel(new BorderLayout());
        content.add(scrollPane, BorderLayout.CENTER);
        final JTextArea output = new JTextArea(5, 30);
        content.add(output, BorderLayout.SOUTH);

        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e) {
                        if (!e.getValueIsAdjusting()) {
                            UserEntry entry = model.getUser(table
                                    .getSelectedRow());
                            if (entry != null) {
                                output.setText("Selected row:"
                                        + table.getSelectedRow() + " "
                                        + entry.toString());
                            } else {
                                output.setText("");
                            }
                        }
                    }
                });

        frame.add(content);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public class UserModel extends AbstractTableModel {

        private static final long serialVersionUID = 1L;
        private List<UserEntry> users = new ArrayList<UserEntry>();

        public UserModel() {
            //TODO - load users
            users.add(new UserEntry(3, "John", "Doe"));
            users.add(new UserEntry(2, "John", "Doe"));
            users.add(new UserEntry(1, "John", "Doe"));
        }

        public UserEntry getUser(int row) {
            if(row >= 0 && row < users.size())
                return users.get(row);
            return null;
        }

        @Override
        public int getRowCount() {
            return users.size();
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            UserEntry entry = users.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return entry.getFirstName();
                case 1:
                    return entry.getLastName();
            }
            return null;
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
                case 0:
                    return "First Name";
                case 1:
                    return "Last Name";
            }
            return null;
        }
    }

    public class UserEntry {
        private int id;
        private String firstName;
        private String lastName;

        public UserEntry(int id, String firstName, String lastName) {
            super();
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public int getId() {
            return id;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        @Override
        public String toString() {
            return "UserEntry [id=" + id + ", firstName=" + firstName
                    + ", lastName=" + lastName + "]";
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new UserTableDemo();
            }
        });
    }
}

您应该创建一个表模型来保存数据,如果需要,还应该创建渲染器来正确显示数据。有关详细信息,请参阅。然后在表的选择侦听器中,可以检索相关行。您可以使用
TableModel.getValueAt()
或添加助手方法来检索所选数据。下面是一个简单的用户模型示例。应用程序打印所选用户,包括表中不可见的id。模型中有一个方便的方法
getUser()
,用于获取特定行的用户。请注意,您也可以使用
DefaultTableModel
来处理以下简单场景

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.AbstractTableModel;

public class UserTableDemo {

    public UserTableDemo() {
        JFrame frame = new JFrame("UserTable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final UserModel model = new UserModel();
        final JTable table = new JTable();
        table.setModel(model);
        JScrollPane scrollPane = new JScrollPane(table);
        JPanel content = new JPanel(new BorderLayout());
        content.add(scrollPane, BorderLayout.CENTER);
        final JTextArea output = new JTextArea(5, 30);
        content.add(output, BorderLayout.SOUTH);

        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e) {
                        if (!e.getValueIsAdjusting()) {
                            UserEntry entry = model.getUser(table
                                    .getSelectedRow());
                            if (entry != null) {
                                output.setText("Selected row:"
                                        + table.getSelectedRow() + " "
                                        + entry.toString());
                            } else {
                                output.setText("");
                            }
                        }
                    }
                });

        frame.add(content);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public class UserModel extends AbstractTableModel {

        private static final long serialVersionUID = 1L;
        private List<UserEntry> users = new ArrayList<UserEntry>();

        public UserModel() {
            //TODO - load users
            users.add(new UserEntry(3, "John", "Doe"));
            users.add(new UserEntry(2, "John", "Doe"));
            users.add(new UserEntry(1, "John", "Doe"));
        }

        public UserEntry getUser(int row) {
            if(row >= 0 && row < users.size())
                return users.get(row);
            return null;
        }

        @Override
        public int getRowCount() {
            return users.size();
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            UserEntry entry = users.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return entry.getFirstName();
                case 1:
                    return entry.getLastName();
            }
            return null;
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
                case 0:
                    return "First Name";
                case 1:
                    return "Last Name";
            }
            return null;
        }
    }

    public class UserEntry {
        private int id;
        private String firstName;
        private String lastName;

        public UserEntry(int id, String firstName, String lastName) {
            super();
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public int getId() {
            return id;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        @Override
        public String toString() {
            return "UserEntry [id=" + id + ", firstName=" + firstName
                    + ", lastName=" + lastName + "]";
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new UserTableDemo();
            }
        });
    }
}

要显示对象,Swing组件将使用放置在其中的对象的toString()方法。一种常见的方法是创建一个包含名称、ID等的数据类,实现toString()以显示所需内容,然后将这些对象的列表放入JList中。然后在选择时,获取所选项目,将其强制转换为数据类,然后调用getID()。

要显示对象,Swing组件将使用toString()方法来显示放置在其中的对象。一种常见的方法是创建一个包含名称、ID等的数据类,实现toString()以显示所需内容,然后将这些对象的列表放入JList中。然后在选择时,获取所选项,将其强制转换到数据类,然后调用getID()