如果你要该我给你一个样板。
public class myList extends JPanel {
private static final long serialVersionUID = 1L
JList mList
DefaultListModel mode
public myList() {
setLayout(new BorderLayout())
mode = new DefaultListModel()
for (int i = 0i <10i++) {
mode.addElement("123")
}
mList = new JList(mode)
mList.setCellRenderer(new MyCellRenderer())
add(new JScrollPane(mList), BorderLayout.CENTER)
}
public static void main(String[] args) {
JFrame jf = new JFrame()
jf.add(new myList(), BorderLayout.CENTER)
jf.pack()
jf.setVisible(true)
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
class MyCellRenderer extends JButton implements ListCellRenderer {
public MyCellRenderer() {
setOpaque(true)
}
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
setText(value.toString())
Color background
Color foreground
// check if this cell represents the current DnD drop location
JList.DropLocation dropLocation = list.getDropLocation()
if (dropLocation != null &&!dropLocation.isInsert() &&dropLocation.getIndex() == index) {
background = Color.BLUE
foreground = Color.WHITE
// check if this cell is selected
} else if (isSelected) {
background = Color.RED
foreground = Color.WHITE
// unselected, and not the DnD drop location
} else {
background = Color.WHITE
foreground = Color.BLACK
}
setBackground(background)
setForeground(foreground)
return this
}
}
}
listCellRenderer是控制显示的,我这里是button,你也可以换成别的,不建议使用jPanel,panel无法显示字体,所以你要自己弄个控件显示。
Model只负责保存数据,和界面无关,不要把界面也放到这里了。
你 new 出来的对象不是同一个对象这种情况不是向List中添加多个元素,而是你在容器中生成了多个List
一个对象只能New一次,在此的话就不是同一个对象了
你想要显示多个元素。 直接把元素放在数组中 ,只写一句
Jlist jlist=new Jlist(a)就把jlist添加到窗体中就Ok了
如果你把Jlist jlist=new Jlist(a)这句话放在 按钮事件中,你试想下,你每次按下后,都要执行Jlist jlist=new Jlist(a)这句话,我们是不是创建了多个对象那?如果你只是单纯的想通过按钮来添加数组中的元素
Jlist jlist=new Jlist()//定义成为类成员 放在按钮事件的外部
int i=0 //定义成为类成员 放在按钮事件的外部
按钮事件中代码可以这么写
jlist.add(a[i])
i++ //每次单击一次按钮 添加一个元素
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)