【问题标题】:How to render an image to a JTable cell如何将图像渲染到 JTable 单元格
【发布时间】:2014-06-26 22:12:09
【问题描述】:

我想在我的 JTable 的单元格上应用渲染器,为此我创建了一个名为 myRenderer 的类:

import java.awt.Component;

import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MyRenderer extends DefaultTableCellRenderer {

public Component getTableCellRendererComponent(JTable table, ImageIcon icon) {

setIcon(icon);
return this;
}
}

我使用这段代码在单元格上应用渲染器:

MyRenderer renderer = new MyRenderer();

renderer.getTableCellRendererComponent(table, icon);

table.getColumnModel().getColumn(6).setCellRenderer(renderer);

问题是 rebderer 应用于第 6 列中的所有单元格,我希望它仅应用于一个单元格(行/列)但我不知道该怎么做?

提前致谢

【问题讨论】:

    标签: java swing jtable cell renderer


    【解决方案1】:

    除了您甚至没有正确覆盖 getTableCellRendererComponent 方法这一事实之外,您甚至不需要自定义渲染器来在列中显示图像

    来自How to Use Tables。这是具有默认预配置渲染器的类型列表

    • Boolean — 带有复选框。
    • Number — 由右对齐标签呈现。
    • Double, Float — 与 Number 相同,但对象到文本的转换由 NumberFormat 实例执行(使用当前语言环境的默认数字格式)。
    • Date — 由标签呈现,由 DateFormat 实例执行对象到文本的转换(使用日期和时间的短样式)。
    • ImageIcon,图标 - 由居中的标签呈现。
    • Object — 由显示对象字符串值的标签呈现。

    因此,您可以将ImageIcon 添加到表中,如果您正确覆盖getColumnClass(),它将按原样呈现

    同样来自教程:

    要选择在列中显示单元格的渲染器,表格首先会确定您是否为该特定列指定了渲染器。如果您不这样做,那么该表将调用表模型的getColumnClass 方法,该方法获取列单元格的数据类型。接下来,该表将列的数据类型与注册单元格渲染器的数据类型列表进行比较

    假设您有一个包含三列的DefaultTableModel,并且您希望在最后一列中添加一个ImageIcon。你会做这样的事情

    DefaultTableModel model = new DefaultTableModel(...) {
        @Override
        public Class<?> getColumnClass(int column) {
            switch (column) {
                case 2: return ImageIcon.class;
                default: return String.class
            }
        }
    };
    JTable table = new JTable(model);
    

    然后只需在第三列添加ImageIcon,它就会呈现为这样

    String colOneDate = "Data";
    String colTwoData = "Data";
    ImageIcon colThreeIcon = new ImageIcon(...);
    model.addRow(new Object[] { colOneData, colTwoData, colThreeIcon });
    

    您可能还想将列宽和高度相应地设置为图像的大小。为此,您可以看到任何these questions

    【讨论】:

      【解决方案2】:

      您可以使用如下所述的 getTableCellRendererComponent 函数。显示图标的图标、行和列,可以使用setter方法从外部设置

      import java.awt.Component;
      
      import javax.swing.JTable;
      import javax.swing.table.DefaultTableCellRenderer;
      
      
        public class MyRenderer extends DefaultTableCellRenderer {
      
      public MyRenderer() {
          // TODO Auto-generated constructor stub
      }
      
      @Override
      public Component getTableCellRendererComponent(JTable table, Object value,
              boolean isSelected, boolean hasFocus, int row, int column) {
          super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
                  row, column);
      
          int neededRow=0; // set the needed row here in which the icon to be dispayed
          int neededcolumn=0; // set the needed column here in which the icon to be dispayed
      
          if(row==neededRow && column==neededcolumn)
          {
              setIcon(icon);
          }
      
          return this
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-02
        • 1970-01-01
        • 2012-04-21
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 2013-02-10
        相关资源
        最近更新 更多