如何在Java Swing表单中显示LoV
,如Oracle Forms所示?
我有关于用户标识符和用户名的数据。我想在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();
}
}
}
答案 0 :(得分:3)
您可以使用JComboBox。
您将创建一个自定义对象来存储两个数据。然后,您将创建一个自定义渲染器,以在组合框中显示您想要的任何数据。然后,您的处理代码将使用其他属性。
查看Combo Box With Custom Renderer以获取您将使用的呈现代码示例。此渲染器比您在论坛中找到的大多数渲染代码更完整,因为它仍然支持使用键盘从组合框中选择项目。
我看到你更新了你的问题,以表明你正在使用JList。那么答案仍然是一样的。您需要为JList提供自定义渲染器。除了扩展DefaultListCellRenderer
。
答案 1 :(得分:3)
我会为User添加一个包装类,其中包含其名称及其id。
不要忘记覆盖User的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;
}
}