Swing编程之JList用法总结

2015-01-02 17:11:44|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, 界面设计|来源:唯设编程网

同时请注意,JList控件不提供鼠标双击元素的处理事件,若要处理鼠标双击的情况,则应该添加鼠标监听器,代码如下:

snapList.addMouseListener(new MouseAdapter() {
	public void mouseClicked(MouseEvent evt)
	{
	   if (evt.getClickCount() == 2)
	   {
	      JList source = (JList) evt.getSource();
	      Object selection = source.getSelectedValue();
	      doAction(selection);
	   }
	}
});

4. 元素重绘

在通常情况是不需要定义JList元素的重绘,但如果系统提供的显示效果无法满足你的要求,你就需要定义JList的重绘函数。

在JList中,内部显示的每一个元素叫做一个Cell。如果我想让内部元素的显示方式更完美一些,比如居中显示,比如每一个Cell字体颜色不一样,那么我们就要借助JList的setCellRenderer方法来实现。该方法接受一个实现了ListCellRenderer接口的参数,而该接口只有一个方法getListCellRendererComponent,但是,该方法的实现是比较简单的,他只需要构造一个Component对象并返回这个对象,这个对象就是一个Cell。因此,真正的难点在于,如何修改这个Component的内部显示方式,从而使得他可以满足一个Cell的显示方式。一般来讲,我们都是用一个JPanel作为绘制Cell的对象,因为在JPanel上显示文字和图像都是很方便的。最后说一个小技巧,我们实现一个类,从JPanel继承而来,同时又实现了ListCellRenderer接口,那么我们只用实现这一个类就可以了,到时候把自己返回。下面我们来看一下具体的代码:

	class FontCellRenderer extends JPanel implements ListCellRenderer {
		public Component getListCellRendererComponent(JList list, Object value,
				int index, boolean isSelected, boolean cellHasFocus) {
			text = (String) value;
			background = isSelected ? list.getSelectionBackground() : list
					.getBackground();
			foreground = isSelected ? list.getSelectionForeground() : list
					.getForeground();
			return this;
		}

		public void paintComponent(Graphics g) {
			g.setColor(background);
			g.fillRect(0, 0, getWidth(), getHeight()); // 设置背景色
			g.setColor(foreground);
			g.drawString(text, 5, 15); // 在制定位置绘制文本
		}

		public Dimension getPreferredSize() {
			return new Dimension(30, 20); // Cell的尺寸
		}

		private String text;
		private Color background;
		private Color foreground;
	}

在上面的代码中,我们定义了一个类,继承自JPanel并实现了指定接口。在这个类里面有3个私有变量,分别存放Cell的内容,Cell的前景色和背景色。因为Cell的绘制完全由程序员来实现,因此这些内容都是必须的。之后就是接口中规定的getListCellRendererComponent方法,这个方法其实很简单,就是对三个变量进行赋值并返回自己。其中前景色和背景色又分为2中情况,就是选中时和未选中时,这点需要注意。接下来我们有实现了2个方法,其中PaintComponent负责Cell的绘制,GetPreferedSize负责设置Cell的尺寸。对于尺寸有一点需要注意,上述代码给的是一个固定尺寸。如果尺寸不固定有变化,那么最终会选择最大的那个尺寸作为所有Cell的尺寸。如果你想在绘制Cell的时候加入什么花样,那么尽管在PaintComponent中施展你的才华吧,上述代码只提供了在指定位置绘制文本,算是抛砖引玉了。这里也有一点需要注意,那就是JPanel本身提供的“居中”,“设置背景色”,“设置前景色”,等方法一律失效,所有的功能一律要使用JAVA 2D来实现,算是一点小小的难度。

5. JList的其它方法

下面是JList其它常用的属性设置方法:

  list.setFixedCellHeight (30);//设置每个选项的高度
  list.setFixedCellWidth (70);//设置每个选项的宽度,一般不需要
  list.setDragEnabled (true);
  list.setBackground (Color.cyan);
  list.setForeground (Color.red);
  list.setSelectionBackground (Color.white);
  list.setSelectionForeground (Color.black);
  list.setLayoutOrientation (JList.HORIZONTAL_WRAP);

到此,JList的常见用法就总结完了,欢迎大家补充!

<12>
发表评论0条 】
网友评论(共?条评论)..
Swing编程之JList用法总结