Swing JTable的一点总结

1、表格中有密码字段
columnModel.getColumn(0).setCellEditor(new DefaultCellEditor(passwordField));

这样只保证编辑状态下的遮盖符,不编辑就会显示明文。而给这一列再设一个DefaultTableCellRenderer,重写其方法
		columnModel.getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
			@Override
			protected void setValue(Object value) {
				String echoStr = null;
				if (value == null || value.toString().length() == 0) {
					echoStr = null;
				} else {
					char[] echoChar = new char[value.toString().length()];
					Arrays.fill(echoChar, passwordField.getEchoChar());
					echoStr = new String(echoChar);
				}
				super.setValue(echoStr);
			}
		});
,这样就可以达到编辑与非编辑状态下的密码显示了。
2、有一个问题困扰我很久,就是编辑一个单元格,输入内容后,如果此时不小心点击了表格头(不是表格体),就会出现输入的内容消失掉了。今天决定跟一下,发现原来之前添加鼠标事件只监控conClick方法,其实JTable内部是监听的mousePressed方法,并调用table.getCellEditor().stopCellEditing();方法。
		table.getTableHeader().addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				if (table.getCellEditor() != null) {
					table.getCellEditor().stopCellEditing();
				}
				super.mousePressed(e);
			}
		});

3、空表格占用整个scrollpane,即默认JTable只显示有内容的行列,也就类似于它的ViewPort只显示好么多,这样显示有点不协调,在JDK6里有一个setFillsViewportHeight()方法,可以实现这一点,但是早期版本没有这个方法,要重写
		table = new JTable(myTableModel) {
			public boolean getScrollableTracksViewportHeight() {
				return getParent() instanceof JViewport
						&& (((JViewport) getParent()).getHeight() > getPreferredSize().height);
			}
		};


你可能感兴趣的:(swing,jtable)