VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 769|回复: 4

怎样在JTable里设定单元格的cellrender

[复制链接]

2

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-10-15 14:00:01 | 显示全部楼层 |阅读模式
大家好,JTable好像只能设置一列的cellrender
我想设置指定单元格的cellrender,而不是整列,请问应该怎么做呢
回复

使用道具 举报

2

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-10-15 14:15:01 | 显示全部楼层
请问用prepareRenderer可以实现吗?
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-10-15 14:30:01 | 显示全部楼层
jtable.setCellSelectionEnable(true);
回复

使用道具 举报

1

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-10-15 15:00:01 | 显示全部楼层
呵呵,我以前和你差不多,不过我是设置editor,当时找了很多资料,以下是我设置指定单元格的CellEditor的方法,希望对你有帮助。
EachRowEditor.java

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

public class EachRowEditor implements TableCellEditor {
  protected Hashtable editors;  //哈希表
  protected TableCellEditor editor, defaultEditor;  //编辑器
  JTable table;  //这个变量似乎没用到

  public EachRowEditor(JTable table) {
    this.table = table;
    editors = new Hashtable();
    defaultEditor = new DefaultCellEditor(new JTextField());  //用JTextField构造编辑器
  }

  public void setEditorAt(int row, TableCellEditor editor) {  //关键
    editors.put(new Integer(row),editor);  //指定编辑器加入哈希表
  }

  public Component getTableCellEditorComponent(JTable table,
      Object value, boolean isSelected, int row, int column) {

    return editor.getTableCellEditorComponent(table,
             value, isSelected, row, column);
  }

  public Object getCellEditorValue() {
    return editor.getCellEditorValue();
  }
  public boolean stopCellEditing() {
    return editor.stopCellEditing();
  }
  public void cancelCellEditing() {
    editor.cancelCellEditing();
  }
  public boolean isCellEditable(EventObject anEvent) {
    selectEditor((MouseEvent)anEvent);
    return editor.isCellEditable(anEvent);
  }
  public void addCellEditorListener(CellEditorListener l) {
    editor.addCellEditorListener(l);
  }
  public void removeCellEditorListener(CellEditorListener l) {
    editor.removeCellEditorListener(l);
  }
  public boolean shouldSelectCell(EventObject anEvent) {
    selectEditor((MouseEvent)anEvent);
    return editor.shouldSelectCell(anEvent);
  }

  protected void selectEditor(MouseEvent e) {  //这个没看明白
    int row;
    if (e == null) {
      row = table.getSelectionModel().getAnchorSelectionIndex();
    } else {
      row = table.rowAtPoint(e.getPoint());
    }
    editor = (TableCellEditor)editors.get(new Integer(row));
    if (editor == null) {
      editor = defaultEditor;
    }
  }
}
设置用以下方法:
EachRowEditor rowEditor = new EachRowEditor(JTable);  //JTable那个参数似乎没用,null应该也可以
rowEditor.setEditorAt(行号, new DefaultCellEditor(jComboBox1));  //用jComboBox1构造编辑器,并指定行
    jTable1.getColumnModel().getColumn(列号).setCellEditor(rowEditor);  //设置编辑器
回复

使用道具 举报

1

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-10-15 15:15:01 | 显示全部楼层
上面的"行号","列号"为int型,两个int便指定了你想要的单元格
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表