在Java中的JList中设置边框

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)

cam*_*ckr 7

为列表创建自定义渲染器,并将Border添加到所选项目.

有关更多信息和示例,请阅读有关如何使用列表的Swing教程中的部分.


Pau*_*tha 5

您可以使用自定义的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。因此,您可以对该标签执行任何您想要的操作,这就是单元格中将显示的内容。

看ListCellRenderer javadoc