-3

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

如果您单击该按钮,它将启动一个带有JFreeChart图表的新窗口。

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

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

但是,如果我双击按钮,新窗口会启动,但按钮上的图标(以前是JFreeChart)将更改为仅具有类名路径的文本字符串和JButton类字段值。

我可以让这种行为发生的另一种方法是,如果我删除单元格渲染器,那么JButton只显示类名。所以我不确定发生了什么,并且已经玩了很多次并且没有取得任何进展。我打算发布一些代码,但代码太多了。如果有人有任何想法,我可以发布某些代码部分来帮助解释。这是代码:

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
    }

}

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

javax.Swing.JButton(0,0,...)

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

4

1 回答 1

2

您发布的代码存在几个问题,并且太长而无法将它们全部包含在评论中。

  1. 您不应将 Swing 组件存储在模型中。组件的创建是渲染器的任务
  2. 我不相信您可以单击渲染器返回的按钮。该按钮不包含在JTable显示的哪个中。在屏幕上仅绘制按钮的图像/屏幕截图/图章,但它的行为不像按钮。你需要一个编辑器。有关更多信息,请参阅JTable有关编辑器和渲染器的教程
于 2012-12-26T16:23:36.443 回答