这是JList的一个例子。我知道如何设置整个JList或包含JList的面板的边框。 我的问题是我们如何在单元格之间创建线条边界?
例如,在给定的图片中,第一个单元格和第二个单元格之间的边框线的颜色是灰色,而所有其他单元格之间有一条白色的边框。
请不要说这是JComboBo
x或JTree
(因为第二个元素及其两个孩子);即使它不是JLis
t,我希望我的JList
在LineBorders
之间具有相似的cells
。
我的网络搜索引导我this interface
。其方法getListCellRendererComponent
采用E value, int index, boolean isSelected, boolean cellHasFocus
之类的参数,而我希望LineBorder
在所有单元格之间显示,无论它们具有什么索引以及它们是否被选中或不是等。
修改: -
某些地方的边界较厚,而其他地方则很好。
答案 0 :(得分:3)
您可以在ListCellRenderer
的帮助下实现这一目标。这是一个简单的例子:
import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
public class TestFrame extends JFrame{
public TestFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
init();
pack();
setVisible(true);
}
private void init() {
JList<String> list = new JList<>(new String[]{"1","2","3"});
list.setCellRenderer(getRenderer());
add(list);
}
private ListCellRenderer<? super String> getRenderer() {
return new DefaultListCellRenderer(){
@Override
public Component getListCellRendererComponent(JList<?> list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
JLabel listCellRendererComponent = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
listCellRendererComponent.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0,Color.BLACK));
return listCellRendererComponent;
}
};
}
public static void main(String... strings) {
new TestFrame();
}
}
看起来像:
在tutorial中阅读更多内容。
编辑:只需将LineBorder
更改为MatteBorder
(已更改代码和图片)。