我的表单上有一个 JList。加载表单时,JList 中将填充我的数组中的项目。这些商品是产品,在产品详细信息旁边有一个“库存数量”编号。 在下面的代码中,我找到库存编号,如果它小于 5,我希望该行以红色突出显示。
目前,如果有任何数量少于 5,我的整个 Jlist 就会以红色突出显示。救命!! 我对 Java 还很陌生,所以请尽可能简单地解释一下! 如果有人可以解释为什么我的代码不能正常工作,那就太好了 - 我真的不明白很多“单元格渲染”的东西 - 我昨天才遇到它。
public void lowStock(){
DefaultListModel<String> list = new DefaultListModel<String>();
list = (DefaultListModel) lstProducts.getModel();
int listSize = list.getSize();
for (int i=0; i<listSize; i++){
String element = list.get(i);
int blankSpace = element.lastIndexOf(" ");
String quantity = element.substring(blankSpace).trim();
final int intQuantity = Integer.parseInt(quantity);
if (intQuantity < 5){
ListCellRenderer lstclrnd;
lstProducts.setCellRenderer(new DefaultListCellRenderer(){
//element.setBackGround(Color.red);
});
}
}
class MyListRenderer extends DefaultListCellRenderer
{
private HashMap theChosen = new HashMap();
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus );
theChosen.put( value, "chosen" );
setBackground( Color.red );
if( theChosen.containsKey( value ) )
{
setBackground( Color.red );
}
最佳答案
您的问题在于以下代码:
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
theChosen.put(value, "chosen");
setBackground( Color.red ); //MOST LIKELY THIS LINE RIGHT HERE
if( theChosen.containsKey( value )) {
setBackground( Color.red );
}
...
如果没有该行setBackground( Color.red );
,则不应设置颜色。
很难确切地了解发生了什么 - 您应该提交 SSCCE 。这只是几个代码片段。
老实说,我认为您想要做的是为您的JList
设置一个ListCellRenderer
。像下面这样的东西就足够了。
class MyCellRenderer extends JLabel implements ListCellRenderer<Object> {
public MyCellRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList<?> list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
//I don't know why you would have leading whitespace here... but w/e
//This probably needs modification depending on your data
String quantity = value.toString().substring(blankSpace).trim();
setText(quantity);
int intQuantity = Integer.parseInt(quantity);
Color background;
Color foreground;
if (intQuantity < 5) {
background = Color.RED;
foreground = Color.WHITE;
} else {
background = Color.WHITE;
foreground = Color.BLACK;
}
setBackground(background);
setForeground(foreground);
return this;
}
}
然后,您的 JList
可能在初始化后立即需要执行以下操作:
myJList.setCellRenderer(new MyCellRenderer());
关于java - JList - 以红色突出显示特定单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180574/