为什么选不中JTable首列的checkbox?? 还有,我如何得到这些Checkbox的状态呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写一个CheckCellRenderer,如下:import javax.swing.JCheckBox;import javax.swing.table.TableCellRenderer;import javax.swing.border.Border;import javax.swing.border.EmptyBorder;import javax.swing.JTable;import java.awt.Component;import javax.swing.UIManager;public class CheckCellRenderer extends JCheckBox implements TableCellRenderer{ protected static Border m_noFocusBorder; public CheckCellRenderer() { super(); m_noFocusBorder = new EmptyBorder(1, 2, 1, 2); setOpaque(true); setBorder(m_noFocusBorder); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { Boolean b = (Boolean)value; setSelected(b.booleanValue()); } setBackground(isSelected && !hasFocus ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); setFont(table.getFont()); setBorder(hasFocus ? UIManager.getBorder( "Table.focusCellHighlightBorder") : m_noFocusBorder); return this; }}把上面你的代码MultiRenderer换成CheckCellRenderer(只能是你用CheckBox的那列)。 非常感谢: esunboy(天使联盟) ,我按您的提示把握原来的MultiRenderer换成了您的CheckCellRenderer,只是去掉了”public class CheckCellRenderer extends JCheckBox implements TableCellRenderer“中的“public ”,然后由於我首列字段是字符型的”True“,"false",不是boolean类型,所以我修改了一下你的类,如下:class CheckCellRenderer extends JCheckBox implements TableCellRenderer{ protected static Border m_noFocusBorder; public CheckCellRenderer() { super(); m_noFocusBorder = new EmptyBorder(1, 2, 1, 2); setOpaque(true); setBorder(m_noFocusBorder); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { Boolean b = (Boolean)value; setSelected(b.booleanValue()); } if (value.toString().equals("false")) { //Boolean b = false; setSelected(true); } else if (value.toString().equals("true")){ setSelected(false); } setBackground(isSelected && !hasFocus ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); setFont(table.getFont()); setBorder(hasFocus ? UIManager.getBorder( "Table.focusCellHighlightBorder") : m_noFocusBorder); return this; }}然而问题还是如故,真不知道为什么。可能有其它方面的原因,您如果有空可以看看这个贴子,谢谢。http://expert.csdn.net/Expert/topic/2662/2662115.xml?temp=8.784121E-02 Java的正则表达式与javascript的是否一样? swing中刷新jtree数据 JButton能作为一个容器么? 关于类的调用,到底需不需要import? java程序与C语言程序交互通信的问题 在线等解答!!! 各位是怎么布局控件的? 如何用ANTLR来从Java源文件中获得一个class/interface的全部field或method的名字? 我的代码不能运行~?!!!(附代码) 这个程序不太明白 使用100%的Java代码可不可以编写对系统硬件进行操作(即直接驱动硬件)的代码啊?比如说直接读写I/O数据,直接进行文件的读写??? 菜鸟提问,大虾不要笑话啊!!(来都有分)
import javax.swing.table.TableCellRenderer;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.JTable;
import java.awt.Component;
import javax.swing.UIManager;
public class CheckCellRenderer extends JCheckBox implements TableCellRenderer
{
protected static Border m_noFocusBorder; public CheckCellRenderer() {
super();
m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setOpaque(true);
setBorder(m_noFocusBorder);
} public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
{
if (value instanceof Boolean) {
Boolean b = (Boolean)value;
setSelected(b.booleanValue());
} setBackground(isSelected && !hasFocus ?
table.getSelectionBackground() : table.getBackground());
setForeground(isSelected && !hasFocus ?
table.getSelectionForeground() : table.getForeground()); setFont(table.getFont());
setBorder(hasFocus ? UIManager.getBorder(
"Table.focusCellHighlightBorder") : m_noFocusBorder); return this;
}
}把上面你的代码MultiRenderer换成CheckCellRenderer(只能是你用CheckBox的那列)。
class CheckCellRenderer extends JCheckBox implements TableCellRenderer
{
protected static Border m_noFocusBorder; public CheckCellRenderer() {
super();
m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setOpaque(true);
setBorder(m_noFocusBorder);
} public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
{
if (value instanceof Boolean) {
Boolean b = (Boolean)value;
setSelected(b.booleanValue());
} if (value.toString().equals("false")) {
//Boolean b = false;
setSelected(true);
}
else if (value.toString().equals("true")){
setSelected(false);
}
setBackground(isSelected && !hasFocus ?
table.getSelectionBackground() : table.getBackground());
setForeground(isSelected && !hasFocus ?
table.getSelectionForeground() : table.getForeground()); setFont(table.getFont());
setBorder(hasFocus ? UIManager.getBorder(
"Table.focusCellHighlightBorder") : m_noFocusBorder); return this;
}
}然而问题还是如故,真不知道为什么。可能有其它方面的原因,您如果有空可以看看这个贴子,谢谢。
http://expert.csdn.net/Expert/topic/2662/2662115.xml?temp=8.784121E-02