小弟初做swing开发急求大神,jtable中如何在单元格中添加一个带有事件的jlabel

小弟初做swing开发急求大神,jtable中如何在单元格中添加一个带有事件的jlabel,第1张

问题拆分来看,其实就是一个渲染和表格单元格选中事件,以下代码仅做参考:

final JComboBox comboBox = new JComboBox()

groups = new ArrayList<String>()

comboBox.setEditable(true)

TableComboBoxEditor editor = new TableComboBoxEditor(comboBox)

table.getColumnModel().getColumn(2).setCellEditor(editor)

table.getModel().addTableModelListener(new TableModelListener() {

public void tableChanged(TableModelEvent e) {

if (e.getType() == TableModelEvent.UPDATE &&e.getColumn() == 2) {

int lastRow = e.getLastRow()

Object value = table.getValueAt(lastRow, 2)

if (value != null &&!value.equals("") &&!groups.contains(value.toString())) {

String item = value.toString()

groups.add(item)

comboBox.addItem(item)

comboBox.setSelectedItem(item)

}

}

}

})

addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

requestFocus()

}

})

你可以实现一个 TableCellRenderer

class MyTableCellRenderer implements TableCellRenderer{

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)

//根据特定的单元格设置不同的Renderer,假如你要在第2行第3列显示图标

if(row == 1 &&column == 2) {

ImageIcon icon = new ImageIcon("icon的位置")

JLabel label = new JLabel(icon)

label.setOpaque(false)

return label

} else {

......

......

}

}

然后把这个Renderer设置到第一列上

TableCellRenderer myRenderer = new MyTableCellRenderer()

table.getColumnModel.getColumn(2).setCellRenderer(myRenderer)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11350623.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存