Как добавить кнопку внутри ячейки таблицы в Java NetBeans? (Я использую метод перетаскивания.) - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь добавить кнопку внутри ячейки таблицы. Я использую метод перетаскивания в NetBeans, так как я ничего не знаю о кодировании и буду признателен, если вы научите меня его кодировать. Спасибо!

cells

1 Ответ

0 голосов
/ 02 октября 2019

Если вы используете drag & drop в netbean для свинга, я настоятельно советую вам прикоснуться к основам свинга, запачкать руки, чтобы вы знали, что происходит и как работает код.

позвольте мне рассказать, как вы можете этого достичь. он будет состоять из 3 классов, чтобы вы лучше понимали, что происходит, и он тоже работает по-другому, но вы можете изменить его по своему предпочтительному шаблону проектирования.

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

tableView.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;
    }

}

tableModel.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 "";
        }
    }
}

Выход

This will be the output once you have run the code

Надеюсь, это поможет. Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...