getColumnModel().getColumn(1).setCellRenderer()
能告诉我怎样在表格中添加组件,如何是按钮,能点击那种
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);
}
}
class JTableButtonModel extends AbstractTableModel {
private Object[][] __rows = { { "One", new JButton("Button One") },
{ "Two", new JButton("Button Two") },
{ "Three", new JButton("Button Three") },
{ "Four", new JButton("Button Four") } };
private String[] __columns = { "Numbers", "Buttons" };
public String getColumnName(int column) {
return __columns[column];
}
public int getRowCount() {
return __rows.length;
}
public int getColumnCount() {
return __columns.length;
}
public Object getValueAt(int row, int column) {
return __rows[row][column];
}
public boolean isCellEditable(int row, int column) {
return false;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
}
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);
}
}
--------------------------------------------
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
public final class JTableButton extends JFrame {
private JTable __table;
private JScrollPane __scrollPane;
public JTableButton() {
super("JTableButton Demo");
TableCellRenderer defaultRenderer;
__table = new JTable(new JTableButtonModel());
defaultRenderer = __table.getDefaultRenderer(JButton.class);
__table.setDefaultRenderer(JButton.class, new JTableButtonRenderer(
defaultRenderer));
__table.setPreferredScrollableViewportSize(new Dimension(400, 200));
__table.addMouseListener(new JTableButtonMouseListener(__table));
__scrollPane = new JScrollPane(__table);
setContentPane(__scrollPane);
}
public static void main(String[] args) {
Frame frame;
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame = new JTableButton();
frame.addWindowListener(exitListener);
frame.pack();
frame.setVisible(true);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。