嗨,我有一个名为ColorChooser的类(在net.java.dev.colorchooser.ColorChooser包中)

这是用于选择颜色的自定义组件。我想要的是在第二列中显示一个带有ColorChoosers的JTable。所以我创建了自己的TableCellRenderer,它可以工作:

@SuppressWarnings("serial")
class ColorChooserTableRenderer extends DefaultTableCellRenderer {

    public static List<ColorChooser> colors;

    public ColorChooserTableRenderer(int rows) {
        colors = new ArrayList<ColorChooser>(rows);
        for (int i = 0; i<rows ; i ++) {
            colors.add(new ColorChooser());
        }
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        return colors.get(row);
    }

}


我在表中注册:

JTable t = new JTable(5,3);
t.getColumn(t.getColumnName(1)).setCellRenderer(new ColorChooserTableRenderer(5));


显示效果很好。当我将鼠标悬停在其中之一上时,它甚至会显示ColorChoosers的工具提示。问题是ColorChoosers没有收到MouseEvent。

通常,当您将鼠标按住在ColorChooser上时,会出现一个弹出窗口,可用于选择颜色。在JTable中时,ColorChooser组件不会收到鼠标事件。

有什么办法吗?

编辑:问题可以很容易地修改为此:

您能给我一个在实际工作的第二列中包含JButtons的表的小例子吗?你知道吗,可以按下的按钮?

最佳答案

渲染器仅将组件绘制在屏幕上,并且不允许交互。您还需要实现TableCellEditor。建议您继承AbstractCellEditor并保存一些工作。检出Java tutorial表。

例:

public class MyTableCellRenderer implements TableCellRenderer
{
    private JButton button = new JButton("Press Me");
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        return button;
    }
}

public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor
{
    private JButton button;

    public MyTableCellEditor()
    {
        button = new JButton("Press Me");
        button.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                System.out.println("buttonPressed");
            }
        });
    }
    public Object getCellEditorValue() {
        return null;
    }
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        return button;
    }
}

关于java - 在自定义JTable中传递事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/887898/

10-12 04:50