pro*_*mer 2 java swing border jlist listselectionlistener
我在Java中有一个JList.每当用户点击一个元素时,我想在该元素中添加一个特定的borderLine.那可能吗?
我在Java中有以下代码:
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("element1");
listModel.addElement("element2");
listModel.addElement("element3");
list = new JList(listModel);
list.addListSelectionListener(this);
Run Code Online (Sandbox Code Playgroud)
对于听众我有:
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {
if (list.getSelectedIndex() == -1) {
;
} else {
CurrentIndex = list.getSelectedIndex();
//set Current's Index border, how can i do that?
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用自定义的ListCellRender. 然后在if (isSelected)刚刚添加边框。
public class MyListCellRenderer implements ListCellRenderer{
private final JLabel jlblCell = new JLabel(" ", JLabel.LEFT);
Border lineBorder = BorderFactory.createLineBorder(Color.BLACK, 1);
Border emptyBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2);
@Override
public Component getListCellRendererComponent(JList jList, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
jlblCell.setOpaque(true);
if (isSelected) {
jlblCell.setForeground(jList.getSelectionForeground());
jlblCell.setBackground(jList.getSelectionBackground());
jlblCell.setBorder(new LineBorder(Color.BLUE));
} else {
jlblCell.setForeground(jList.getForeground());
jlblCell.setBackground(jList.getBackground());
}
jlblCell.setBorder(cellHasFocus ? lineBorder : emptyBorder);
return jlblCell;
}
}
Run Code Online (Sandbox Code Playgroud)
然后实例化渲染。
MyListCellRenderer renderer = new MyListCellRenderer();
JList list = new JList();
list.setCellRenderer(renderer);
Run Code Online (Sandbox Code Playgroud)
渲染器将返回一个 JLabel。因此,您可以对该标签执行任何您想要的操作,这就是单元格中将显示的内容。