首页 > 解决方案 > java - 如何在java netbeans的表格单元格中添加一个按钮?(我正在使用拖放方法。)

问题描述

我正在尝试在表格单元格中添加一个按钮。我正在使用 netbeans 的拖放方法,因为我对编码一无所知,如果你能教我编码,我将不胜感激。谢谢!

细胞

标签: javaswingnetbeans

解决方案


如果您在 netbean 中使用拖放操作来实现 swing,我强烈建议您接触 swings 的基础,亲自动手,这样您就会知道发生了什么以及代码是如何工作的。

让我介绍一下如何实现这一目标。它将由 3 个类组成,以便您更好地了解正在发生的事情,并且它也练习 oop,但是您可以将其修改为您喜欢的设计模式。

_main.java

public class _main extends JFrame{
private static final long serialVersionUID = 1L;

// Create new JFrame
_main(){
    new JFrame("Main");
    setLayout(new BorderLayout());
    setSize(500,300);
    add(new JLabel("Table Example ", SwingUtilities.CENTER) , BorderLayout.PAGE_START);

   // ---------------- Call the method you have created in tableView.java ------------

    add(new JScrollPane(new tableView(this).sampleTable()), BorderLayout.CENTER);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
   }


   public static void main(String[] args){
//Run Program
    new _main();
   }
}

表视图.java

public class tableView {

    JFrame frame = new JFrame();
    public tableView(JFrame frame) {
        this.frame = frame;
    }

//Create columnTitle & Table Model 
    String[] columnTitle = { "Data 1", "Data 2", "Data 3", "Buttons " };
    DefaultTableModel model = new DefaultTableModel(columnTitle, 0);

    public JTable sampleTable(){
            JTable _dataTable = new JTable(model) {
                @Override
                public void updateUI() {
                    super.updateUI();
                    setRowHeight(34);
                    setAutoCreateRowSorter(true);

     //------------ Placing button at your desired column ------------

                    TableColumn column;
                    column = getColumnModel().getColumn(3);
                    column.setCellRenderer(new tableModel(frame).new viewRenderer());
                    column.setCellEditor(new tableModel(frame).new ButtonsEditorView(this));
                }
            };
            DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
            centerRenderer.setHorizontalAlignment(JLabel.CENTER);

       //-------- Adding data to your table row , use for loop for multiple data ---------

            model.addRow(new Object[]{"1","2","3"});
            return _dataTable;
    }

}

表模型.java

public class tableModel extends tableView{
    public tableModel(JFrame frame) {
        super(frame);
    }


    class viewButton extends JPanel {
        public JButton viewbtnp = new JButton("View");
        protected viewButton() {
            setOpaque(true);
            setFocusable(false);
            add(viewbtnp);
        }
    }

    class viewRenderer implements TableCellRenderer {
        private final viewButton panel = new viewButton() {
            @Override
            public void updateUI() {
            super.updateUI();
            setName("Table.cellRenderer");
            }
        };

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
            panel.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
            return panel;
        }
    }

    class ViewAction extends AbstractAction {
        private final JTable table;

        protected ViewAction(JTable table) {
            super("view");
            this.table = table;     
        }

        @Override
        public void actionPerformed(ActionEvent e) {

        //--------------------------- Create your own function on what you want the button to do when button is clicked -------------
            System.out.println("Clicked ");
        }
    }

    class ButtonsEditorView extends AbstractCellEditor implements TableCellEditor {
        protected final viewButton panel = new viewButton();
        protected final JTable table;

        protected ButtonsEditorView(JTable table) {
            super();
            this.table = table;
            panel.viewbtnp.setAction(new ViewAction(table));
        }

        @Override
        public Component getTableCellEditorComponent(JTable tbl, Object value, boolean isSelected, int row,
            int column) {
            panel.setBackground(tbl.getSelectionBackground());
            return panel;
        }

        @Override
        public Object getCellEditorValue() {
            return "";
        }
    }
}

输出

运行代码后,这将是输出

希望能帮助到你。干杯


推荐阅读