当前位置: 首页 > 面试题库 >

如何在JTable的列中设置图标?

阙佐
2023-03-14
问题内容

我能够设置列的标题,但不能在JTable第一列的所有行中设置图标。

public class iconRenderer extends DefaultTableCellRenderer{
    public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
        imageicon i=(imageicon)obj;
        if(obj==i)
            setIcon(i.imageIcon);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(JLabel.CENTER);
        return this;
    }
}

public class imageicon{
    ImageIcon imageIcon;
    imageicon(ImageIcon icon){
        imageIcon=icon;
    }
}

和下面的BuildTable()方法中的行。

    public void SetIcon(JTable table, int col_index, ImageIcon icon){
      table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer());
      table.getColumnModel().getColumn(col_index).setHeaderValue(new imageicon(icon));
}

我们如何为第一列的所有行设置它?我已经尝试过for循环,但没有让行迭代来设置图标。还是还有其他方法?


问题答案:

无需创建自定义渲染。JTable已经支持Icon渲染器。您只需要告诉表使用此渲染器即可。这是通过重写表模型的getColumnClass(…)方法来完成的:

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

public class TableIcon extends JPanel
{
    public TableIcon()
    {
        Icon aboutIcon = new ImageIcon("about16.gif");
        Icon addIcon = new ImageIcon("add16.gif");
        Icon copyIcon = new ImageIcon("copy16.gif");

        String[] columnNames = {"Picture", "Description"};
        Object[][] data =
        {
            {aboutIcon, "About"},
            {addIcon, "Add"},
            {copyIcon, "Copy"},
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames)
        {
            //  Returning the Class of each column will allow different
            //  renderers to be used based on Class
            public Class getColumnClass(int column)
            {
                return getValueAt(0, column).getClass();
            }
        };
        JTable table = new JTable( model );
        table.setPreferredScrollableViewportSize(table.getPreferredSize());

        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("Table Icon");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TableIcon());
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

}


 类似资料:
  • 问题内容: 使用以下示例代码: 我们想用上面的代码在column_names中设置带有列名的标头,但是它不起作用。尽管正在创建表,但标题不可见。 问题答案: 为了能够看到标题,您应该将表放在JScrollPane中。 或者,如果您确实不希望使用滚动窗格,则可以将tableHeader专门添加到面板中(但是:通常,您不希望这种行为):

  • 问题内容: 我想将String放入比给定单元格宽度更长的字符串中。如何动态设置,以便可以读取整个String?这是一个例子: 在这里,您将看到将给定单元格较长的每个文本换行的代码 谢谢,但是我想根据字符串的长度动态地实现RowHeight。我想读取单元格中的整个字符串/文本。有什么建议? 我是Java初学者,这是我的第一个问题。我很高兴得到答案。 问题答案: 使用JTextArea作为呈现组件时会

  • 问题内容: 首先,我要说的不是关于渲染表格单元。 这是我基于数据库中的对象使用2D数组构建的TableModel 。 我的问题是如何使用表中的选定行取回对象。请注意,我无法创建新对象并用行数据填充它。我必须获取查询的对象(中的对象)。那么,他们用表行设置Object的任何方法吗? 这是我的课。 问题答案: 无需在创建模型之前拆分对象,而是将其直接添加到模型中并允许模型为您完成工作… 例如 这样,您

  • 我只想在假设有一个值列表的单元格中添加一个JComboBox。下面是我的代码,但它在列中的所有单元格中添加了组合框。让我知道我的代码中缺少了什么,以便只在选定的单元格上设置组合框。

  • 问题内容: 我有如下代码: 我想查看列标题名称。我尝试使用此代码,但看不到名称。我想知道怎么做吗? 另外,我也想设置来自的单元格值。 问题答案: 列名称直到您添加到a 后才会显示,就像在教程中显示的那样。

  • 我创建了一个几乎为空的UIViewController类,名为。在视图中,我设置标题并添加一个关闭按钮到导航我tem.leftBarButtonItem。 我的如下所示: 显示viewController时,其视图的背景为黑色。如何设置它的视图以用空视图填充屏幕——就像在故事板中设置UIViewController一样? 我已经尝试将以下内容添加到视图,但是视图仍然是黑色的: