zoukankan      html  css  js  c++  java
  • 一个关于JTabel的DefaultCellEditor渲染很棒的例子

    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();
        }
    }

  • 相关阅读:
    题解 [APIO2014]连珠线
    题解 [ZJOI2019]语言
    题解 Hero meet devil
    题解 [BJOI2019]奥术神杖
    题解「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
    题解 Sue的小球/名次排序问题/方块消除/奥运物流
    题解 「一本通 5.4 练习 1」涂抹果酱
    Mybatis的类型转换
    面试题:微服务熔断降级限流
    面试题:微服务网关
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3285673.html
Copyright © 2011-2022 走看看