package helloworld;import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import javax.swing.border.*;public class ListTest extends JFrame
{
private JPanel jPanel1 = new JPanel();
private JList jList1 = new JList(new Object[]{"a","b","c","d","e"});
private CheckBoxRender render = new CheckBoxRender();
private Border border1; public static void main(String[] args)
{
ListTest t = new ListTest();
t.setSize(400,300);
t.show();
} public ListTest()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
border1 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(124, 124, 124),new Color(178, 178, 178));
jList1.setBorder(border1);
jList1.setPreferredSize(new Dimension(250, 100));
jList1.setCellRenderer(render);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jList1, null);
}
class CheckBoxRender extends JCheckBox implements ListCellRenderer{
public Component getListCellRendererComponent(JList list,Object value ,int row,boolean isSelected,boolean hasFocus) {
setText(value.toString());
if(isSelected) {
setForeground(list.getSelectionForeground() );
setBackground(list.getSelectionBackground());
}
else {
setForeground(list.getForeground());
setBackground(list.getBackground());
} setSelected(true);
/**
* your code here
*/
return this;
}
}
}
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import javax.swing.border.*;public class ListTest extends JFrame
{
private JPanel jPanel1 = new JPanel();
private JList jList1 = new JList(new Object[]{"a","b","c","d","e"});
private CheckBoxRender render = new CheckBoxRender();
private Border border1; public static void main(String[] args)
{
ListTest t = new ListTest();
t.setSize(400,300);
t.show();
} public ListTest()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
border1 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(124, 124, 124),new Color(178, 178, 178));
jList1.setBorder(border1);
jList1.setPreferredSize(new Dimension(250, 100));
jList1.setCellRenderer(render);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jList1, null);
}
class CheckBoxRender extends JCheckBox implements ListCellRenderer{
public Component getListCellRendererComponent(JList list,Object value ,int row,boolean isSelected,boolean hasFocus) {
setText(value.toString());
if(isSelected) {
setForeground(list.getSelectionForeground() );
setBackground(list.getSelectionBackground());
}
else {
setForeground(list.getForeground());
setBackground(list.getBackground());
} setSelected(true);
/**
* your code here
*/
return this;
}
}
}
本来要贴代码的,被楼上的强了先
完全可以作到你保存一个“羊头”,显示出来是个“狗肉”。
由于默认的ListCellRenderer是扩展JLabel组件,而且他调用你的数据对象的toString把要显示的数据转换为string并以一个JLabel负责显示。你只要把自己的ListCellRenderer扩展自JCheckBox自然就实现了所说的问题。另外:我曾经这样做过,但是并不好看,原因就是前面的那个小框框。其实完全可以拿JLabel实现类似的视觉效果,由于Jlable可以设置Icon,你只要找一个漂亮的"对勾"的图片,当选中某一行数据的时候,就把该"对勾"显示出来,看上去和JCheckBox用户的理解基本是一样的,大家都会直到意思的.这样子做还是自己定义ListCellRenderer,可以扩展Default...
只需要实现
public Component getListCellRendererComponent(JList list,Object value ,int row,boolean isSelected,boolean hasFocus)
方法,
并根据参数中isSelected和hasFocus来控制何时显示图标.
contentPane.setLayout(borderLayout1);
JCheckBox[] checkBoxArray=new JCheckBox[20];
JList jls=new JList();
JPanel jpn=new JPanel();
jpn.setLayout(null);
for(int i=0;i<20;i++){
checkBoxArray[i]=new JCheckBox("Items"+i);
jpn.add(checkBoxArray[i]);
checkBoxArray[i].reshape(0,i*20+2,100,20);
}
jpn.setSize(100,20*20);
jls.add(jpn);
jls.setPreferredSize(new Dimension(100,20*20));
JScrollPane jp=new JScrollPane(jls);
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
contentPane.add(jp,BorderLayout.CENTER);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
}
能不能把相应的事件也加上
我要是实现的功能:1,mainframe中创建一个实例,myListTest
2,点击mainframe中的一个jtextArea,则myListTest.setVisiable(true);
3, 此时可以在myListTest中进行选择,
4,当鼠标移开myListTest,myListTest.setVisiable(false)
并将myListTest选中的check闲时到jtextArea,!