JTable 最后一列如何自动添加JButton?? JTable 的模式我重载的AbstractTableModel如何添加最后一列为JButton.让我点Button的时候知道所选中的行.谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没印象了, 只记得原来加过 JCheckBox render 和edit 是两个不同的东西,记住这点应该差不多了 http://topic.csdn.net/t/20050804/10/4187846.htmlhttp://topic.csdn.net/t/20020515/10/723443.htmlhttp://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最好还是分开 晕死,前几天给你回复的没有解决啊?!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 我表格是extends AbstractTableModel为什么我最后一列就是不出来呢。....难道是因为我每次选中都是选中一整行的关系? 多谢gongfuliang 终于出来了。.我想问下 当我选中某一行的BUTTON的时候。如何在BUTTON事件中获得我选中的是哪一行? UP~~~~gongfuliang能不能告诉下当我选中某一行的BUTTON的时候。如何在BUTTON事件中获得我选中的是哪一行? 我知道如何获取到了。..多谢楼上的。.特别是gongfulian 和 laorer 的帮助. 刚看到,你的Button的事件是在Editor中添加的,那么就可以获取Editor所在的行啊 http://www.webjsp.net/html/224看看这个网站上的效果图和代码吧 RestFB中Insight怎么使用? 关于JButton的问题 修改树节点图标的问题 求JAVA制作的类似QQ软件的源代码 JAVA菜鸟请教 小第要做一个项目,建立一个自动EMAIL回复机,详细的请进来看,拿个高手曾经做个这方面的项目,可以进来给个想法. 界面的代码求救 100分求: SL285課程練習題源碼 自己写了一个测试代码,报错:类WhiteCat是公共的,应在名为WhiteCat.java的文件中声明 java 加密函数,高分求解 JAVA一个程序中为什么规定只能有一个公共类? SWT shell 窗体如何在桌面中央显示?
如果你搜过的话,就当跳过这个
public class ButtonCellEdit extends AbstractCellEditor implements
TableCellRenderer, TableCellEditor, ActionListener {
} 会有以下两个方法要你重写的,你加两个button进去, 一个做为 render,一个做为 button试试看
getTableCellRendererComponent(getTableCellEditorComponent
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();
}
}
为什么我最后一列就是不出来呢。....
难道是因为我每次选中都是选中一整行的关系?
我想问下 当我选中某一行的BUTTON的时候。如何在BUTTON事件中获得我选中的是哪一行?
当我选中某一行的BUTTON的时候。如何在BUTTON事件中获得我选中的是哪一行?