java swing中JTable怎样添加按钮到单元格中?

zhangshenqiu 2009-08-19 01:51:25
java swing中JTable怎样添加按钮到单元格中?各位给点实例我看看,谢谢!
...全文
1385 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
虎翼 2009-08-20
  • 打赏
  • 举报
回复
不好意思
panel.ssJournal.setComponent(i, 0, tCheckBox);
应是
panel.jTable.setComponent(i, 0, tCheckBox);
虎翼 2009-08-20
  • 打赏
  • 举报
回复

/** 向JTable中填充数据,第一列是CheckBox*/
private void setDataList(Vector<Vector> cells) {

// jTable数据
JCVectorDataSource ds = new JCVectorDataSource();
ds.setCells(cells);
ds.setNumRows(cells.size());
ds.setNumColumns(33);

panel.jTable.setDataSource(ds);

for (int i = 0; i < cells.size(); i++) {
JCheckBox tCheckBox = new JCheckBox ();
tCheckBox.setOpaque(false);
tCheckBox.setHorizontalAlignment(JCTableEnum.CENTER);
tCheckBox.addItemListener(cbxListener);
panel.ssJournal.setComponent(i, 0, tCheckBox);
}
}


/** JTable中CheckBox选择时,行选中*/
private ItemListener cbxListener = new ItemListener() {

public void itemStateChanged(ItemEvent e) {
int focusRow = panel.jTable.getCurrentRow();
panel.jTable.setRowSelection(focusRow, focusRow);
}
};
problc 2009-08-19
  • 打赏
  • 举报
回复
需要自定义一个ButtonRender。
下面是个简单实现

class JTableButtonRenderer implements TableCellRenderer {
private TableCellRenderer __defaultRenderer;

public JTableButtonRenderer(TableCellRenderer renderer) {
__defaultRenderer = renderer;
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row, int column)
{
if(value instanceof Component)
return (Component)value;
return __defaultRenderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
}
}

/**
*
* @author Daniel F. Savarese
*/
class JTableButtonMouseListener implements MouseListener {
private JTable __table;

private void __forwardEventToButton(MouseEvent e) {
TableColumnModel columnModel = __table.getColumnModel();
int column = columnModel.getColumnIndexAtX(e.getX());
int row = e.getY() / __table.getRowHeight();
Object value;
JButton button;
MouseEvent buttonEvent;

if(row >= __table.getRowCount() || row < 0 ||
column >= __table.getColumnCount() || column < 0)
return;

value = __table.getValueAt(row, column);

if(!(value instanceof JButton))
return;

button = (JButton)value;

buttonEvent =
(MouseEvent)SwingUtilities.convertMouseEvent(__table, e, button);
button.dispatchEvent(buttonEvent);
// This is necessary so that when a button is pressed and released
// it gets rendered properly. Otherwise, the button may still appear
// pressed down when it has been released.
__table.repaint();
}

public JTableButtonMouseListener(JTable table) {
__table = table;
}

public void mouseClicked(MouseEvent e) {
__forwardEventToButton(e);
}

public void mouseEntered(MouseEvent e) {
__forwardEventToButton(e);
}

public void mouseExited(MouseEvent e) {
__forwardEventToButton(e);
}

public void mousePressed(MouseEvent e) {
__forwardEventToButton(e);
}

public void mouseReleased(MouseEvent e) {
__forwardEventToButton(e);
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧