Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 Swing格式的值列表_Java_Swing - Fatal编程技术网

Java Swing格式的值列表

Java Swing格式的值列表,java,swing,Java,Swing,如何在Java Swing表单中显示LoV,如Oracle表单中所示 我有关于用户标识符和用户名的数据。我想在LoV中显示用户名,但如果用户选择了与用户对应的名称,则应返回其标识符 编辑1: 这是我用来显示“Lov”的表单代码 import db.DBHelper; import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; public class LovForm extends J

如何在Java Swing表单中显示
LoV
,如Oracle表单中所示

我有关于用户标识符和用户名的数据。我想在
LoV
中显示用户名,但如果用户选择了与用户对应的名称,则应返回其标识符

编辑1: 这是我用来显示“Lov”的表单代码

import db.DBHelper;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

public class LovForm extends JDialog implements ActionListener {

    private Connection conn;
    private DBHelper db;
    private JList list;
    private DefaultListModel model;
    private UserDetail userDetail;
    private JButton btnOk;

    public LovForm(Connection c, UserDetail u) {
        this.conn = c;
        this.userDetail = u;
        initComponents();
    }

    private void initComponents() {
        db = new DBHelper(this.conn);
        btnOk = new JButton("Ok");
        btnOk.addActionListener(this);
        Container c = this.getContentPane();
        c.setLayout(new FlowLayout());
        model = new DefaultListModel();
        try {
            ResultSet rs = db.getAllAppUsers();
            if (rs != null) {
                while (rs.next()) {
                    String name = rs.getString("NAME");
                    model.addElement(name);
                }
                list = new JList(model);
            }
        } catch (Exception e) {
            list = new JList();
        }

        list.setPreferredSize(new Dimension(150, 250));
        JScrollPane listScroller = new JScrollPane(list);
        JLabel lbl = new JLabel("Select an application user");
        c.add(lbl);
        c.add(listScroller);
        c.add(btnOk);

        this.setTitle("List of Users");
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setSize(new Dimension(200, 250));
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setModal(true);    
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e
    ) {
        if (e.getSource() == btnOk) {
            String selectedItem = (String) list.getSelectedValue();
            userDetail.setUserName(selectedItem);
            this.dispose();
        }
    }
}

你可以使用JComboBox

您将创建一个自定义对象来存储这两段数据。然后,您将创建一个自定义渲染器,以便在组合框中显示所需的任何数据。然后,处理代码将使用另一个属性

查看您将使用的渲染代码示例。此渲染器比论坛中的大多数渲染代码更完整,因为它仍然支持使用键盘从组合框中选择项目


我看到您更新了问题,表明您正在使用JList。答案还是一样的。您的JList需要一个自定义渲染器。除了扩展
DefaultListCellRenderer

您可以使用JComboBox外,您可以基于上述链接中的示例创建渲染器

您将创建一个自定义对象来存储这两段数据。然后,您将创建一个自定义渲染器,以便在组合框中显示所需的任何数据。然后,处理代码将使用另一个属性

查看您将使用的渲染代码示例。此渲染器比论坛中的大多数渲染代码更完整,因为它仍然支持使用键盘从组合框中选择项目


我看到您更新了问题,表明您正在使用JList。答案还是一样的。您的JList需要一个自定义渲染器。除了扩展
DefaultListCellRenderer

之外,您可以根据上述链接中的示例创建渲染器。我将为用户添加一个包装类,其中包含其名称和id

不要忘记重写用户的toString()方法(在呈现列表时将使用该方法)

填充列表时,创建用户对象,因此您可以访问其名称和id

见下面的代码:

    private void initComponents() {
    // your code....

    try {
        ResultSet rs = db.getAllAppUsers();
        if (rs != null) {
            while (rs.next()) {
                String name = rs.getString("NAME");
                int id = rs.getInt("ID"); 
                model.addElement(new User(name, id));
            }
            list = new JList(model);
        }
    } catch (Exception e) {
        list = new JList();
    }

    // your code...
}

@Override
public void actionPerformed(ActionEvent e
) {
    if (e.getSource() == btnOk) {
        User selectedItem = (User) list.getSelectedValue();
        userDetail.setUserName(selectedItem.getName());
        int id = selectedItem.getId();
        this.dispose();
    }
}

public class User {
   private String name;
   private Integer id;

   public User(String name, Integer id) {
       this.name = name;
       this.id = id;
   }

   public String getName() {
       return name;
   }

   public Integer getId() {
      return id;
   }

   @Override
   public String toString() {
      return name;
   }
}

我将为用户添加一个包装器类,其中包含其名称和id

不要忘记重写用户的toString()方法(在呈现列表时将使用该方法)

填充列表时,创建用户对象,因此您可以访问其名称和id

见下面的代码:

    private void initComponents() {
    // your code....

    try {
        ResultSet rs = db.getAllAppUsers();
        if (rs != null) {
            while (rs.next()) {
                String name = rs.getString("NAME");
                int id = rs.getInt("ID"); 
                model.addElement(new User(name, id));
            }
            list = new JList(model);
        }
    } catch (Exception e) {
        list = new JList();
    }

    // your code...
}

@Override
public void actionPerformed(ActionEvent e
) {
    if (e.getSource() == btnOk) {
        User selectedItem = (User) list.getSelectedValue();
        userDetail.setUserName(selectedItem.getName());
        int id = selectedItem.getId();
        this.dispose();
    }
}

public class User {
   private String name;
   private Integer id;

   public User(String name, Integer id) {
       this.name = name;
       this.id = id;
   }

   public String getName() {
       return name;
   }

   public Integer getId() {
      return id;
   }

   @Override
   public String toString() {
      return name;
   }
}

您能提供您到目前为止所做的工作吗?请参阅有问题的编辑部分。您能提供您到目前为止所做的工作吗?请参阅有问题的编辑部分。不要覆盖toString()使用自定义渲染器。这两种解决方案都有效(toString或自定义渲染器)。从开发人员的角度来看,toString“更快”,但自定义渲染器更好:)正是如此,我们在这里推广更好的编程实践。不要覆盖toString(),请使用自定义渲染器。这两种解决方案都有效(toString或自定义渲染器)。从开发人员的角度来看,toString“更快”,但定制渲染器更好:)正是如此,我们在这里推广更好的编程实践。