jtable 中如何插入 checkbox ,(在DefaultTableModel中)---------------------------------------小问题,急。。。高分诶,大侠们

时间:2022-09-26 08:03:57

import   javax.swing.*;   

import   java.util.*;   
import   javax.swing.table.*;   
import   java.applet.*;   
import   java.awt.*;   
import   java.awt.event.*;   

import   javax.swing.event.*;   
import   java.lang.String;   
  
public   class   no2   extends   JApplet   
{   
        Vector   srcdata   =   new   Vector();    
        Vector   rowdata   =   new   Vector();   
        Vector   cname   =   new   Vector(4);   
        JTable   jt   =   new   JTable();   
        DefaultTableModel  model   =   new DefaultTableModel(srcdata,cname);   
        JScrollPane   js   =   new   JScrollPane();   //创建滚动窗   
  
  
        public   void   init()   
        {   
                setSize(500,300);
                Container   c   =   this.getContentPane();   
                  JPanel   jp2   =   new   JPanel();   //装载表格的面板  
                rowdata.add("njnS");   
                rowdata.add("");   
                rowdata.add(""); 
                JCheckBox checkBox = new JCheckBox(); //-----------------问题的地方
                
                rowdata.add(checkBox);   
                cname.add(columnName[0]);   
                cname.add(columnName[1]);   
                cname.add(columnName[2]);   
                cname.add(columnName[3]);   
                srcdata.add(rowdata);   
                jt.setModel(model);   
                jt.setCellSelectionEnabled(true);   //是能否选中一个cell,也就是一行和一列的交叉单元格   
                  jt.setColumnSelectionAllowed(true);  
                js.add(jt); 
                c.add(js);
          }
}

//我想在jtable里添加checkbox 看到了吧,可是添加进去显示出来的却是一行文字:javax.swing.JCheckBox[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1982fc1,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=false,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=]

//怎么办?

14 个解决方案

#1


http://topic.csdn.net/u/20090319/15/21f41826-e960-49eb-bc6d-a283c8be1e78.html
這里面 有幾個小程序段   你可以看看 ~  應該差不多

#2


是不是哦

#3


可以使用JTable的public void setDefaultRenderer(Class<?> columnClass,TableCellRenderer renderer)
要你自己实现一个TableCellRenderer ,那个columnClass就是你checkbox的class
这就要牵扯到了swing的Renderer机制了,初次理解可能有点困难,可以先学着使用JList来显示自定义数据。
同样也是给JList设置一个自定义的CellRenderer。

#4


我还没用过JTable,是来接分的

#5



    JTable table = new JTable();
    TableColumn col = table.getColumn(columnName);
    col.setCellEditor(new DefaultCellEditor(new JCheckBox()));
    col.setCellRenderer(new MyCheckBoxRenderer());
   //下面是个Renderer类
  public class MyCheckBoxRenderer
    extends JCheckBox
    implements TableCellRenderer {

  public MyCheckBoxRenderer() {}

  public Component getTableCellRendererComponent(JTable table, Object value,
 boolean isSelected,
 boolean hasFocus,
 int row, int column) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    }
    else {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    if (value == null || !(value instanceof Boolean)) {
      value = new Boolean(false);
    }
    setSelected( ( (Boolean) value).booleanValue());
    return this;
  }
}

#6


有了 renderer 在加个editor 否则编辑还是textfild编辑

#7


引用 6 楼 a276202460 的回复:
有了 renderer 在加个editor 否则编辑还是textfild编辑

对,要自己设置渲染器(renderer)和编辑器(editor)

#8


不太明白  但同意三楼的。。。。。。。。。

#9


up,也不是很明白,对于渲染器(renderer)和编辑器(editor)没怎么用过,以后会去试试

#10


使用renderer和editor,

#11



tabImgRes = new JTable() {
public TableCellEditor getCellEditor(int row, int column) {
switch (column) {
case ImgResTableModel.COL_VALUE:
return null;
case ImgResTableModel.COL_PARAM:
switch (row) {
case XStyle.IMAGE_ARROW:
case XStyle.IMAGE_CURSOR:
return new DefaultCellEditor(cboxDirect);
case XStyle.IMAGE_BG:
return new DefaultCellEditor(cboxPollType);
}
break;
}
return super.getCellEditor(row, column);
}
};


随手摘了一小段以前写的代码,大概就是这么个意思,楼主看一下CellRender和CellEditor相关的文档就知道了。

#12


引用 6 楼 a276202460 的回复:
有了 renderer 在加个editor 否则编辑还是textfild编辑



col.setCellEditor(new DefaultCellEditor(new JCheckBox()));

我不是已经设置editor了吗?

#13


Swing中JTable要内容要设成checkbox很简单,只要将tablemodel的列属性设成boolean就行了。这是JTable默认的。

#14


引用 13 楼 diggywang 的回复:
Swing中JTable要内容要设成checkbox很简单,只要将tablemodel的列属性设成boolean就行了。这是JTable默认的。


终于有个明白人了。

#1


http://topic.csdn.net/u/20090319/15/21f41826-e960-49eb-bc6d-a283c8be1e78.html
這里面 有幾個小程序段   你可以看看 ~  應該差不多

#2


是不是哦

#3


可以使用JTable的public void setDefaultRenderer(Class<?> columnClass,TableCellRenderer renderer)
要你自己实现一个TableCellRenderer ,那个columnClass就是你checkbox的class
这就要牵扯到了swing的Renderer机制了,初次理解可能有点困难,可以先学着使用JList来显示自定义数据。
同样也是给JList设置一个自定义的CellRenderer。

#4


我还没用过JTable,是来接分的

#5



    JTable table = new JTable();
    TableColumn col = table.getColumn(columnName);
    col.setCellEditor(new DefaultCellEditor(new JCheckBox()));
    col.setCellRenderer(new MyCheckBoxRenderer());
   //下面是个Renderer类
  public class MyCheckBoxRenderer
    extends JCheckBox
    implements TableCellRenderer {

  public MyCheckBoxRenderer() {}

  public Component getTableCellRendererComponent(JTable table, Object value,
 boolean isSelected,
 boolean hasFocus,
 int row, int column) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    }
    else {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    if (value == null || !(value instanceof Boolean)) {
      value = new Boolean(false);
    }
    setSelected( ( (Boolean) value).booleanValue());
    return this;
  }
}

#6


有了 renderer 在加个editor 否则编辑还是textfild编辑

#7


引用 6 楼 a276202460 的回复:
有了 renderer 在加个editor 否则编辑还是textfild编辑

对,要自己设置渲染器(renderer)和编辑器(editor)

#8


不太明白  但同意三楼的。。。。。。。。。

#9


up,也不是很明白,对于渲染器(renderer)和编辑器(editor)没怎么用过,以后会去试试

#10


使用renderer和editor,

#11



tabImgRes = new JTable() {
public TableCellEditor getCellEditor(int row, int column) {
switch (column) {
case ImgResTableModel.COL_VALUE:
return null;
case ImgResTableModel.COL_PARAM:
switch (row) {
case XStyle.IMAGE_ARROW:
case XStyle.IMAGE_CURSOR:
return new DefaultCellEditor(cboxDirect);
case XStyle.IMAGE_BG:
return new DefaultCellEditor(cboxPollType);
}
break;
}
return super.getCellEditor(row, column);
}
};


随手摘了一小段以前写的代码,大概就是这么个意思,楼主看一下CellRender和CellEditor相关的文档就知道了。

#12


引用 6 楼 a276202460 的回复:
有了 renderer 在加个editor 否则编辑还是textfild编辑



col.setCellEditor(new DefaultCellEditor(new JCheckBox()));

我不是已经设置editor了吗?

#13


Swing中JTable要内容要设成checkbox很简单,只要将tablemodel的列属性设成boolean就行了。这是JTable默认的。

#14


引用 13 楼 diggywang 的回复:
Swing中JTable要内容要设成checkbox很简单,只要将tablemodel的列属性设成boolean就行了。这是JTable默认的。


终于有个明白人了。