嗨,我有一个名为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/