当前位置: 首页 > 知识库问答 >
问题:

JTable,通过MousClick在具体单元格中动态添加lable

薛保臣
2023-03-14
/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 364, 385);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    table = new JTable();
    table.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent event) {
            Point point = event.getPoint();
            JTable target = (JTable)event.getSource();
            int column = table.columnAtPoint(point); 
            int row = target.getSelectedRow();
           table.getColumnModel().getColumn(column).setCellRenderer(new ImageRenderer());
            //JOptionPane.showMessageDialog(table, "Column header #" + column + " is clicked");
        }
    });
    table.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.DARK_GRAY, Color.LIGHT_GRAY, SystemColor.menu, null));
    table.setModel(new DefaultTableModel(
        new Object[][] {
            {null, "", null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
        },
        new String[] {
            "New column", "New column", "New column", "New column", "New column", "New column"
        }
    ));
    table.getColumnModel().getColumn(0).setMinWidth(50);
    table.setBounds(0, 0, 350, 350);
    table.setRowHeight(50);
    frame.getContentPane().add(table);
}
class ImageRenderer extends DefaultTableCellRenderer {
  JLabel lbl = new JLabel();
  ImageIcon imageIcon = new ImageIcon(new ImageIcon("green-glossy-ball.jpg").getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT));

  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column) {
    lbl.setIcon(imageIcon);
    return lbl;
  }

}

共有1个答案

林修真
2023-03-14

不需要自定义呈现。

你需要做的是:

  1. 表模型
  2. 添加 图标
  3. 重写TableModelGetColumnClass(...)方法以返回Class.Icon,表将使用默认的图标呈现器。
table.setBounds(0, 0, 350, 350);
table.setRowHeight(50);
frame.getContentPane().add(table);
 类似资料:
  • 问题内容: 什么是空指针异常(),什么原因导致它们? 可以使用哪些方法/工具确定原因,以阻止异常导致程序过早终止? 问题答案: 声明引用变量(即对象)时,实际上是在创建指向对象的指针。考虑以下代码,您在其中声明基本类型的变量: 在此示例中,变量是an ,Java会为您初始化它。在第二行为其分配值时,您的值将写入所指的存储位置。 但是,当您尝试声明引用 类型时 ,会发生一些不同的事情。采取以下代码:

  • 问题内容: 我有一个空的JTable,绝对没有。我需要以某种方式动态生成其表列。我尝试使用的代码的简化版本: 但是我得到了 线程“ AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:0> = 0 我究竟做错了什么? 如果有帮助,这是完整的堆栈跟踪: 问题答案: 我认为您需要将列添加到表的数据模型及其列模型中。当数据模型更改时

  • 问题内容: 我正在寻找一种方法来在表格单元格中显示动画进度指示器(动画GIF,通过Java2D渲染的旋转轮等,此处没有首选项),直到计算或检索出最终显示的值为止。 到目前为止,我只是在尚未准备好加速显示的每个单元格中放置了一个静态的“待处理…”文本。当数据从后台线程到达时,我将其放入适当的单元格中并在表上调用repaint。 使用静态标签或图像可以很好地工作,但是由于单元格渲染仅将其用作橡皮图章,

  • 我想改变JTable的单元格背景颜色,想从MySQL数据库中获取数据。 我在MySQL中使用一个数据表,它有一个状态字段。如果状态为1,则单元格背景颜色应为红色;如果状态为0,则应更改为红色。

  • 我的代码有一个特殊的问题。 然后它会发生在图像上出现的事情。我需要汉字列是CENTER对齐,但出于某种原因,'tcr,不工作,因为它应该是,但默认渲染器正在做它应该是。 有什么建议/帮助吗?

  • JTable: 我在NetBeans中创建了一个JTable,其中我从数据库中的某些列中获取值,如图中所示,我为TESTNAME、单位、SPECIFICRANGE列带来值,但第二列OBSERVED VALUE我为用户输入保留了空值,用户输入是这样的每当用户点击颜色前面的单元格时,他应该在第二列单元格中得到一个JComboBox,我的意思是鼠标事件上的颜色前面的单元格,对于其他单元格,我使用edit