如何在JTABLE中设置列为按钮 按钮还要显示背景图片 table.getColumn(model.getColumnName(2)).setCellEditor(new JButtonCellEditor());哪位高手可以指导下 最好是能给下代码 帮我实现JButtonCellEditor 这个类 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下:自定义tableModel和TableCellRenderer,根据自己需求适当修改import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.File;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.UIManager;import javax.swing.border.Border;import javax.swing.border.EmptyBorder;import javax.swing.table.AbstractTableModel;import javax.swing.table.TableCellRenderer;public class JTableButton extends JPanel { private JTable table; private JScrollPane scrollPane; private JButton[] buttons; private String path = System.getProperty("user.dir") + File.separator + "images" + File.separator; public JTableButton() { setBorder(BorderFactory.createLineBorder(Color.red, 1)); init(); } private void init() { String headName[] = { "Name", "age", "sex", "adress", "image" }; buttons = new JButton[5]; for(int i=0;i<buttons.length;i++){ buttons[i] = new JButton(""+i); } Object obj[][] = { { "LiMing", 23, Boolean.TRUE, buttons[0], new ImageIcon(path + "icon.png") }, { "ZhangSan", 25, Boolean.TRUE,buttons[1], new ImageIcon(path + "icon.png") }, { "WangWu", 21, Boolean.FALSE, buttons[2], new ImageIcon(path + "icon.png") }, { "LiSi", 28, Boolean.TRUE, buttons[3], new ImageIcon(path + "icon.png") }, { "LuBo", 20, Boolean.FALSE, buttons[4], new ImageIcon(path + "icon.png") }, }; table = new JTable(new MyTableModel(headName,obj)); table.setDefaultRenderer(JButton.class, new ComboBoxCellRenderer()); scrollPane = new JScrollPane(table); setLayout(new BorderLayout()); add(scrollPane, BorderLayout.CENTER); addHandler(); } private void addHandler(){ //添加事件 table.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { System.out.println("table"); int row = table.getSelectedRow(); int column = table.getSelectedColumn(); System.out.println("row="+row+":"+"column="+column); if(column==3){ //处理button事件写在这里... System.out.println(((JButton)table.getValueAt(row, column)).getText()); } } }); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new JTableButton()); frame.setSize(new Dimension(800, 400)); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class MyTableModel extends AbstractTableModel { private String headName[]; private Object obj[][]; public MyTableModel() { super(); } public MyTableModel(String[] headName, Object[][] obj) { this(); this.headName = headName; this.obj = obj; } public int getColumnCount() { return headName.length; } public int getRowCount() { return obj.length; } public Object getValueAt(int r, int c) { return obj[r][c]; } public String getColumnName(int c) { return headName[c]; } public Class<?> getColumnClass(int columnIndex) { return obj[0][columnIndex].getClass(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex == 3 || columnIndex == 4) { return false; } return true; } }}class ComboBoxCellRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JButton cmb = (JButton) value; if (isSelected) { cmb.setForeground(table.getSelectionForeground()); cmb.setBackground(table.getSelectionBackground()); } else { cmb .setForeground((unselectedForeground != null) ? unselectedForeground : table.getForeground()); cmb .setBackground((unselectedBackground != null) ? unselectedBackground : table.getBackground()); } cmb.setFont(table.getFont()); if (hasFocus) { cmb .setBorder(UIManager .getBorder("Table.focusCellHighlightBorder")); if (!isSelected && table.isCellEditable(row, column)) { Color col; col = UIManager.getColor("Table.focusCellForeground"); if (col != null) { cmb.setForeground(col); } col = UIManager.getColor("Table.focusCellBackground"); if (col != null) { cmb.setBackground(col); } } } else { cmb.setBorder(noFocusBorder); } return cmb; } protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); private Color unselectedForeground; private Color unselectedBackground;} 求一匹配字符串的正则表达式 讨论:org.eclipse.jface.viewers.ComboBoxCellEditor 下拉菜单功能有时会失效的问题 一个简单的字符串截取问题 50分 有在四川读北大青鸟的朋友吗。希望指导下 A b = new B() 产生的到底是谁的对象?? 简单问题,请大家指点一下! 菜鸟的问题! 哪一个更好?? 音标显示问题?? 请教一道算法题 @@帮忙看看这个奇怪的js问题 Swing中迷惑的问题~请您帮助
代码如下:自定义tableModel和TableCellRenderer,根据自己需求适当修改import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;public class JTableButton extends JPanel {
private JTable table;
private JScrollPane scrollPane;
private JButton[] buttons;
private String path = System.getProperty("user.dir") + File.separator
+ "images" + File.separator;
public JTableButton() {
setBorder(BorderFactory.createLineBorder(Color.red, 1));
init();
} private void init() {
String headName[] = { "Name", "age", "sex", "adress", "image" };
buttons = new JButton[5];
for(int i=0;i<buttons.length;i++){
buttons[i] = new JButton(""+i);
}
Object obj[][] = {
{ "LiMing", 23, Boolean.TRUE, buttons[0],
new ImageIcon(path + "icon.png") },
{ "ZhangSan", 25, Boolean.TRUE,buttons[1],
new ImageIcon(path + "icon.png") },
{ "WangWu", 21, Boolean.FALSE, buttons[2],
new ImageIcon(path + "icon.png") },
{ "LiSi", 28, Boolean.TRUE, buttons[3],
new ImageIcon(path + "icon.png") },
{ "LuBo", 20, Boolean.FALSE, buttons[4],
new ImageIcon(path + "icon.png") }, };
table = new JTable(new MyTableModel(headName,obj));
table.setDefaultRenderer(JButton.class, new ComboBoxCellRenderer());
scrollPane = new JScrollPane(table);
setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);
addHandler();
}
private void addHandler(){
//添加事件
table.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
System.out.println("table");
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
System.out.println("row="+row+":"+"column="+column);
if(column==3){
//处理button事件写在这里...
System.out.println(((JButton)table.getValueAt(row, column)).getText());
}
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new JTableButton());
frame.setSize(new Dimension(800, 400));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class MyTableModel extends AbstractTableModel {
private String headName[];
private Object obj[][];
public MyTableModel() {
super();
}
public MyTableModel(String[] headName, Object[][] obj) {
this();
this.headName = headName;
this.obj = obj;
} public int getColumnCount() {
return headName.length;
} public int getRowCount() {
return obj.length;
} public Object getValueAt(int r, int c) {
return obj[r][c];
} public String getColumnName(int c) {
return headName[c];
} public Class<?> getColumnClass(int columnIndex) {
return obj[0][columnIndex].getClass();
} @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 3 || columnIndex == 4) {
return false;
}
return true;
} }
}class ComboBoxCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JButton cmb = (JButton) value;
if (isSelected) {
cmb.setForeground(table.getSelectionForeground());
cmb.setBackground(table.getSelectionBackground());
} else {
cmb
.setForeground((unselectedForeground != null) ? unselectedForeground
: table.getForeground());
cmb
.setBackground((unselectedBackground != null) ? unselectedBackground
: table.getBackground());
}
cmb.setFont(table.getFont());
if (hasFocus) {
cmb
.setBorder(UIManager
.getBorder("Table.focusCellHighlightBorder"));
if (!isSelected && table.isCellEditable(row, column)) {
Color col;
col = UIManager.getColor("Table.focusCellForeground");
if (col != null) {
cmb.setForeground(col);
}
col = UIManager.getColor("Table.focusCellBackground");
if (col != null) {
cmb.setBackground(col);
}
}
} else {
cmb.setBorder(noFocusBorder);
}
return cmb;
} protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); private Color unselectedForeground;
private Color unselectedBackground;
}