java jlist多列
时间: 2023-10-11 14:18:54 浏览: 102
在 Java 的 JList 中,实现多列可以使用 JTable 代替 JList。但是如果要在 JList 中实现多列,可以通过自定义 ListCellRenderer 来实现。
下面是一个简单的示例代码,其中 JList 中的每个元素都是一个 JPanel,该 JPanel 包含多个 JLabel,用于显示每列的数据。
```
import javax.swing.*;
import java.awt.*;
public class MultiColumnJListDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("Multi-Column JList Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
// 创建需要显示的数据
String[][] data = {{"1", "John", "Doe"}, {"2", "Jane", "Smith"}, {"3", "Bob", "Johnson"}};
JList<String[]> list = new JList<>(data);
list.setCellRenderer(new MultiColumnCellRenderer());
JScrollPane scrollPane = new JScrollPane(list);
frame.add(scrollPane);
frame.setVisible(true);
}
// 自定义的 ListCellRenderer
static class MultiColumnCellRenderer extends JPanel implements ListCellRenderer<String[]> {
private JLabel indexLabel;
private JLabel firstNameLabel;
private JLabel lastNameLabel;
public MultiColumnCellRenderer() {
setLayout(new GridLayout(1, 3));
indexLabel = new JLabel();
firstNameLabel = new JLabel();
lastNameLabel = new JLabel();
add(indexLabel);
add(firstNameLabel);
add(lastNameLabel);
}
@Override
public Component getListCellRendererComponent(JList<? extends String[]> list, String[] value, int index, boolean isSelected, boolean cellHasFocus) {
indexLabel.setText(value[0]);
firstNameLabel.setText(value[1]);
lastNameLabel.setText(value[2]);
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this;
}
}
}
```
在此示例中,我们创建了一个包含三列数据的 JList,并为其设置了一个自定义的 ListCellRenderer,该渲染器将每个元素作为一个 JPanel 显示,并在该面板中添加了多个 JLabel,用于显示每列的数据。注意,此示例中的数据类型是 String[],每个字符串数组都包含三个元素,分别对应三列数据。
阅读全文