问问大家 我想在JList中加入那种既有字符串,又有图片,就是说一个对象里有名字和图片,然后加入到JList中,可以吗?我不知道怎么做?谁 问问大家 我想在JList中加入那种既有字符串,又有图片,就是说一个对象里有名字和图片,然后加入到JList中,可以吗?我不知道怎么做?谁知道可以说说吗?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用JList的绘制器就可以了,用JLable做为JList里面一个Item的绘制对象 就是说图片文字都放入JLable中,再加入到JList中吗 哦昨天找拉下知道拉是这样 做的 可又有个新的问题 就是说我做的程序是个网络聊天的,在客户端,险要输入帐号,密码和妮称,并且要选择图象才可以进入,所选择的图象和后来进去的妮称对应,也就是在JList中的一行里面。可以用下面的程序,只可以实现表头到表尾的依次赋予图片,实现不了跟前面选择的图片对应请问我可以选择对那个具体的行数赋予图片吗?而不是重头到尾一次赋予。import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class JList6{ public JList6() { String[] s = {"西瓜","苹果","草莓","香蕉","葡萄"}; JFrame f = new JFrame("JList"); Container contentPane = f.getContentPane(); JList list1 = new JList(s); list1.setBorder(BorderFactory.createTitledBorder("您喜欢吃哪些水果?")); /*设置在JList中画上图像。在此参数中,我们产生一个CellRenderer对象,此对象实作了ListCellRenderer interface, *因此可以返回一个ListCellRenderer对象当作setCellRenderer()方法的参数. */ list1.setCellRenderer(new CellRenderer()); contentPane.add(new JScrollPane(list1)); f.pack(); f.show(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String args[]) { new JList6(); }}class CellRenderer extends JLabel implements ListCellRenderer{ /*类CellRenderer继承JLabel并实作ListCellRenderer.由于我们利用JLabel易于插图的特性,因此CellRenderer继承了JLabel *可让JList中的每个项目都视为是一个JLabel. */ CellRenderer() { setOpaque(true); } /*从这里到结束:实作getListCellRendererComponent()方法*/ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { /*我们判断list.getModel().getElementAt(index)所返回的值是否为null,例如上个例子中,若JList的标题是"你玩过哪 *些数据库软件",则index>=4的项目值我们全都设为null.而在这个例子中,因为不会有null值,因此有没有加上这个判 *断并没有关系. */ if (value != null) { setText(value.toString()); setIcon(new ImageIcon(".\\icons\\fruit"+(index+1)+".jpg")); } if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { //设置选取与取消选取的前景与背景颜色. setBackground(list.getBackground()); setForeground(list.getForeground()); } return this; } } 我以前写过一段代码,现在帖出来。下面是渲染器,和你上面的差不多,但是它的数据(列表框的数据不直接提供)/* * UserList渲染器 */public class UserListCellRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) { //这里就是列表框的数据,其中UserListData是我自己定义的一个类,刚下面. UserListData data = (UserListData) value; /* * 在JLabel上放上图标和字符串 * 并设置文本在右边,以及两者的间距 */ setText(data.getText()); setIcon(data.getIcon()); setHorizontalTextPosition(SwingConstants.RIGHT); setIconTextGap(5); setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); /* * 设置项目被选中时的颜色 */ if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setEnabled(list.isEnabled()); setFont(list.getFont()); setOpaque(true); return this; }}/* * 一个UserListData代表列表框中一行 * 由一个图标和一个字符串组成 */public class UserListData { private Icon icon; private String text; public UserListData(String text, Icon icon) { this.text = text; this.icon = icon; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Icon getIcon() { return icon; } public void setIcon(Icon icon) { this.icon = icon; }}OK,下面看看列表框的产生吧/* * UserList是一个JList * 它显示用户列表 */public class UserList extends JList { UserListData[] data; public UserList() { init(); } private void init() { String[] texts = new String[6]; texts[0] = "笨笨(21506431)"; texts[1] = "笨笨(21506431)"; texts[2] = "笨笨(21506431)"; texts[3] = "笨笨(21506431)"; texts[4] = "笨笨(21506431)"; texts[5] = "笨笨(21506431)"; ImageIcon icon = new ImageIcon( getClass().getResource("img/face.gif")); data = new UserListData[6]; for (int i = 0; i < texts.length; ++i) { data[i] = new UserListData(texts[i], icon); } this.setCellRenderer(new UserListCellRenderer()); setListData(data); }}当然,我由于时间问题,上面的就不改了,这是我以前写的一个小demo,没有什么实际用处,但能说明这个问题。 java中protected所属类子类中问题 求一个算法 40分~~~在线等~~ 有关replaceAll的性能问题 求助,怎样在指定的一个区域内重新画某个图形? 在线急等简单问题 请教JTable中列冻结的问题 向大家请教一下本人学JNI的时候遇到问题。 怎么样输出20位以上的double字符类型? java swing 七彩连珠 重新启动按钮功能无法实现 有关JBuilder中DataExpress的问题! 关于NetBeans IDE的问题,请高手关注!!! 如何在Panel放置上百个component?
就是说我做的程序是个网络聊天的,在客户端,险要输入帐号,密码和妮称,并且要选择图象
才可以进入,所选择的图象和后来进去的妮称对应,也就是在JList中的一行里面。
可以用下面的程序,只可以实现表头到表尾的依次赋予图片,实现不了跟前面选择的图片对应
请问我可以选择对那个具体的行数赋予图片吗?而不是重头到尾一次赋予。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;public class JList6
{
public JList6()
{
String[] s = {"西瓜","苹果","草莓","香蕉","葡萄"};
JFrame f = new JFrame("JList");
Container contentPane = f.getContentPane();
JList list1 = new JList(s);
list1.setBorder(BorderFactory.createTitledBorder("您喜欢吃哪些水果?"));
/*设置在JList中画上图像。在此参数中,我们产生一个CellRenderer对象,此对象实作了ListCellRenderer interface,
*因此可以返回一个ListCellRenderer对象当作setCellRenderer()方法的参数.
*/
list1.setCellRenderer(new CellRenderer());
contentPane.add(new JScrollPane(list1));
f.pack();
f.show();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[])
{
new JList6();
}
}class CellRenderer extends JLabel implements ListCellRenderer
{
/*类CellRenderer继承JLabel并实作ListCellRenderer.由于我们利用JLabel易于插图的特性,因此CellRenderer继承了JLabel
*可让JList中的每个项目都视为是一个JLabel.
*/
CellRenderer()
{
setOpaque(true);
}
/*从这里到结束:实作getListCellRendererComponent()方法*/
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
/*我们判断list.getModel().getElementAt(index)所返回的值是否为null,例如上个例子中,若JList的标题是"你玩过哪
*些数据库软件",则index>=4的项目值我们全都设为null.而在这个例子中,因为不会有null值,因此有没有加上这个判
*断并没有关系.
*/
if (value != null)
{
setText(value.toString());
setIcon(new ImageIcon(".\\icons\\fruit"+(index+1)+".jpg"));
}
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}
else {
//设置选取与取消选取的前景与背景颜色.
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this;
}
}
下面是渲染器,和你上面的差不多,但是它的数据(列表框的数据不直接提供)/*
* UserList渲染器
*/
public class UserListCellRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean hasFocus) {
//这里就是列表框的数据,其中UserListData是我自己定义的一个类,刚下面.
UserListData data = (UserListData) value;
/*
* 在JLabel上放上图标和字符串
* 并设置文本在右边,以及两者的间距
*/
setText(data.getText());
setIcon(data.getIcon());
setHorizontalTextPosition(SwingConstants.RIGHT);
setIconTextGap(5);
setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
/*
* 设置项目被选中时的颜色
*/
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true); return this;
}}
/*
* 一个UserListData代表列表框中一行
* 由一个图标和一个字符串组成
*/
public class UserListData {
private Icon icon;
private String text;
public UserListData(String text, Icon icon) {
this.text = text;
this.icon = icon;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon) {
this.icon = icon;
}
}OK,下面看看列表框的产生吧
/*
* UserList是一个JList
* 它显示用户列表
*/
public class UserList extends JList {
UserListData[] data;
public UserList() {
init();
}
private void init() {
String[] texts = new String[6];
texts[0] = "笨笨(21506431)";
texts[1] = "笨笨(21506431)";
texts[2] = "笨笨(21506431)";
texts[3] = "笨笨(21506431)";
texts[4] = "笨笨(21506431)";
texts[5] = "笨笨(21506431)";
ImageIcon icon = new ImageIcon(
getClass().getResource("img/face.gif"));
data = new UserListData[6];
for (int i = 0; i < texts.length; ++i) {
data[i] = new UserListData(texts[i], icon);
}
this.setCellRenderer(new UserListCellRenderer());
setListData(data);
}
}当然,我由于时间问题,上面的就不改了,这是我以前写的一个小demo,没有什么实际用处,但能说明这个问题。