首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JTable 最后一列怎么自动添加JButton?

2012-04-02 
JTable 最后一列如何自动添加JButton??JTable 的模式我重载的AbstractTableModel如何添加最后一列为JButto

JTable 最后一列如何自动添加JButton??
JTable 的模式我重载的AbstractTableModel
如何添加最后一列为JButton.
让我点Button的时候知道所选中的行.
谢谢了。

[解决办法]
没印象了, 只记得原来加过 JCheckBox render 和edit 是两个不同的东西,记住这点应该差不多了
[解决办法]
http://topic.csdn.net/t/20050804/10/4187846.html



http://topic.csdn.net/t/20020515/10/723443.html



http://www.devtopic.com/Java/J2SE/20070727/70407.html


如果你搜过的话,就当跳过这个
[解决办法]
你要继承下 AbstractCellEditor ;
public class ButtonCellEdit extends AbstractCellEditor implements
TableCellRenderer, TableCellEditor, ActionListener {


会有以下两个方法要你重写的,你加两个button进去, 一个做为 render,一个做为 button试试看
getTableCellRendererComponent(

getTableCellEditorComponent

[解决办法]
不知道Button列在展现的时候是正常的,还是就是一个按钮。

看看我的博客,里面就有这样的例子,使用Table的CellRenderer和CellEditor实现。

http://topic.csdn.net/u/20081222/22/258e0297-9936-43a0-9f40-44170c95b397.html?878802289下面也是我的一个回复。

PS:Renderer和Editor最好还是分开
[解决办法]
晕死,前几天给你回复的没有解决啊?!

Java code
 
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;

import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;

public class JButtonTableExample extends JFrame {

public JButtonTableExample() {
super("JButtonTable Example");

DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][] { { "button 1", "foo" },
{ "button 2", "bar" } }, new Object[] { "Button", "String" });

JTable table = new JTable(dm);
table.setOpaque(true);
table.setBackground(Color.red);
table.getColumn("Button").setCellRenderer(new ButtonRenderer());
table.getColumn("Button").setCellEditor(
new ButtonEditor(new JCheckBox()));
JScrollPane scroll = new JScrollPane(table);
getContentPane().add(scroll);
setSize(400, 100);
setVisible(true);
}

public static void main(String[] args) {
JButtonTableExample frame = new JButtonTableExample();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}

class ButtonRenderer extends JButton implements TableCellRenderer {

public ButtonRenderer() {
setOpaque(true);
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(UIManager.getColor("Button.background"));
}
setText((value == null) ? "" : value.toString());


return this;
}
}

class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private String label;
private boolean isPushed;

public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}

public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
if (isSelected) {
button.setForeground(table.getSelectionForeground());
button.setBackground(table.getSelectionBackground());
} else {
button.setForeground(table.getForeground());
button.setBackground(table.getBackground());
}
label = (value == null) ? "" : value.toString();
button.setText(label);
isPushed = true;
return button;
}

public Object getCellEditorValue() {
if (isPushed) {
JOptionPane.showMessageDialog(button, label + ": Ouch!");
}
isPushed = false;
return new String(label);
}

public boolean stopCellEditing() {
isPushed = false;
return super.stopCellEditing();
}

protected void fireEditingStopped() {
super.fireEditingStopped();
}
}



[解决办法]
Renderer负责显示,如果你不想单元格在没有编辑的时候就展现为一个Button的话,那就设置为DefaultCellRenderer
[解决办法]
自定义绘制器
[解决办法]
up

热点排行