双击JButtton表不起作用,只显示JButton的类名

时间:2012-12-26 14:17:49

标签: java swing jtable

我有JTable只包含一个JButtton项,其图标设置为JFreeChart生成的图表。

如果单击该按钮,则会启动带有JFreeChart图表的新窗口。

我有一个按钮的单元格渲染器,它只返回包含图表项目的JButton对象。

如果我单击按钮,它将启动新窗口。

但是,如果我双击按钮,则会启动新窗口,但按钮上的图标(曾经是JFreeChart)只会更改为文本字符串,其类名路径为{{1使用类字段值。

我可以通过其他方式实现这种行为,如果我删除了单元格渲染器,那么JButton只会覆盖类名。因此,我不确定发生了什么,并且已经玩了很多,并没有取得任何进展。我打算发布一些代码但是有太多的代码。 如果有人有任何想法,我可以发布某些代码段来帮助解释。 这是代码:

JButton

这一切都有效,除非双击JButton并显示TEXT ex。

Class init {

    ...
    ItModel itModel = new ItModel ();
    JTable table = new JTable(itModel );
    TableRendrend rend = new TableRend();
    table.getColumn("it").setCellRenderer(rend);

}

class TableRend implements TableCellRenderer {
    JButton itButton;
    ...

    getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int columns){
         if(itButton ==null){
            itButton = new JButton (JButton)value.getIcon();
         }

        return itButton;

    }

}

Class itModel extends AbstractTableModel{
    JButton button;

...

public Object getValueAt(int rowIndex, intColumnIndex){
     if(button==null){
        button = new JButton( new ImageIcon(JFreeChartImage.getImage()));
        }

    return button
    }

}

所有字段值,而不是应显示的实际图表图像

1 个答案:

答案 0 :(得分:2)

您发布的代码存在多个问题,并且将其全部纳入评论中的时间太长。

  1. 您不应将Swing组件存储在模型中。组件的创建是渲染器的任务
  2. 我不相信您可以单击渲染器返回的按钮。该按钮不包含在显示的JTable中。在屏幕上仅绘制按钮的图像/屏幕截图/标记,但它不像按钮那样。你需要一个编辑器。有关详细信息,请参阅JTable tutorial about the editors and renderers