在表格单元格中添加标签和按钮
如下图所示,在表格单元格中添加标签和按钮:
?

?
代码如下:
?
?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
?
import javax.swing.AbstractCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
?
import com.customcomponent.basicClass.BasicTableColumnModel;
?
import syspublicpanel.table.SysLoadTable;
import syspublicpanel.table.SysLoadTableModel;
import uiframework.tools.UIProperties;
?
public class TestTableRenderer extends JFrame {
??? private static final long serialVersionUID = 3941331829886452257L;
??? private SysLoadTable testTable = null;// 表格
???
??? private static final String[] colNames = new String[] { "第一列", "第二列", "第三列" };// 表头
???
??? public TestTableRenderer() {
?????? initialize();
??? }
???
??? /**
??? ?* 初始化组件
??? ?*/
??? private void initialize() {
?????? this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?????? this.setSize(400, 300);
?????? this.setLocation(200, 100);
?????? this.setLayout(new BorderLayout());
?????? this.add(new JScrollPane(getTestTable()), BorderLayout.CENTER);
??????
?????? this.setVisible(true);
??? }
???
??? private SysLoadTable getTestTable() {
?????? if (testTable == null) {
?????????? SysLoadTableModel tableModel = new SysLoadTableModel(colNames);
?????????? tableModel.setAllEditableColumn(false);// 设置所有列不可编辑
?????????? tableModel.setColumnEditable("第三列", true);// 设置第三列可编辑
??????????
?????????? /**
?????????? ?* 添加表格内容
?????????? ?*/
?????????? tableModel.addRow(new Object[] { "1", "2", null });
?????????? tableModel.addRow(new Object[] { "11", "22", null });
?????????? tableModel.addRow(new Object[] { "111", "222", null });
??????????
?????????? testTable = new SysLoadTable(tableModel);
??????????
?????????? BasicTableColumnModel columnModel = (BasicTableColumnModel) testTable.getColumnModel();
?????????? columnModel.getColumn(2).setCellRenderer(new CustomTableRenderer());
?????????? columnModel.getColumn(2).setCellEditor(new CustomTableRenderer());
?????? }
?????? return testTable;
??? }
?
??? public static void main(String[] args) {
?????? try {
?????????? UIManager.setLookAndFeel(UIProperties.getInstance().getLookAndFeel());
?????? } catch (ClassNotFoundException e) {
?????????? e.printStackTrace();
?????? } catch (InstantiationException e) {
?????????? e.printStackTrace();
?????? } catch (IllegalAccessException e) {
?????????? e.printStackTrace();
?????? } catch (UnsupportedLookAndFeelException e) {
?????????? e.printStackTrace();
?????? }
??????
?????? new TestTableRenderer();
??? }
}
?
/**
?* 自定义表格渲染器
?*/
class CustomTableRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor {
??? private static final long serialVersionUID = 7380564532198049597L;
??? private JPanel panel = null;// 面板
??? private JLabel delLabel = null;// 删除标签
??? private JButton modifyButton = null;// 修改按钮
???
??? private static final String imagePath = "/sysimages/";// 图片路径
???
??? public CustomTableRenderer() {
?????? delLabel = new JLabel(new ImageIcon(getClass().getResource(imagePath + "delete.gif")));
?????? delLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
?????? delLabel.setToolTipText("删除");
??????
?????? modifyButton = new JButton("修改");
?????? modifyButton.setPreferredSize(new Dimension(60, 20));
??????
?????? panel = new JPanel();
?????? panel.setBackground(Color.WHITE);
?????? panel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
?????? panel.add(delLabel);
?????? panel.add(modifyButton);
??? }
???
??? public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
?????? if (row == table.getSelectedRow()) {
?????????? panel.setBackground(table.getSelectionBackground());
?????? } else {
?????????? panel.setBackground(Color.WHITE);
?????? }
?????? return panel;
??? }
??????
?
??? public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
??????????????if (row == table.getSelectedRow()) {
??????????? panel.setBackground(table.getSelectionBackground());
?????? } else {
?????????? panel.setBackground(Color.WHITE);
?????? }
?????? return panel;
??? }
?
??? public Object getCellEditorValue() {
?????? return null;
??? }
}
?
?