在表格单元格中添加标签和按钮

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

 

在表格单元格中添加标签和按钮

 

代码如下:

 

 

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;

    }

}