elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Colocar Boton de Modificar en celda de JTable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Colocar Boton de Modificar en celda de JTable  (Leído 5,355 veces)
Fernandez2494

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Colocar Boton de Modificar en celda de JTable
« en: 30 Septiembre 2018, 20:17 pm »

Buenas, estoy teniendo inconvenientes con un Formulario que cree, estoy queriendo colocar un boton en una celda de mi JTable para poder Modificar la fila seleccionada, tengo un formulario que me muestra todos los pedidos que fueron generados durante el dia con ayudar de un Text Field que con una clase "Fecha" genera la fecha para ese cuadro de texto, con una clase "CargarTabla" creo la consulta y lo cargo en mi Jtable cada vez que este se inicie de forma automatica, este es mi codigo, necesitaba una ayudar para saber donde modificar o que debo hacer. Desde ya gracias


Código
  1. private boolean CargarTabla() {
  2.    boolean isOk = false;
  3.    String sql = "";
  4.  
  5.    StatementManager sm = new StatementManager();
  6.    try {
  7.        DefaultTableModel dtm = (DefaultTableModel) jTablePedidos.getModel();
  8.        sql = "SELECT vt.id_venta, sb.sabor as Sabor, vt.cantidad, vt.precio, vt.total"
  9.                + "  FROM item_venta vt inner join sabores   sb on sb.id_sabor  = vt.id_sabor where fecha = '" + jTFechaCompra.getText() + "'"
  10.                + "AND   pagado = 'N'";
  11.        System.out.println(sql);
  12.        sm.TheSql = sql;
  13.        sm.EjecutarSql();
  14.        while (sm.TheResultSet.next()) {
  15.            dtm.addRow(new Object[]{sm.TheResultSet.getString("id_venta"),
  16.                sm.TheResultSet.getString("sabor"), sm.TheResultSet.getString("cantidad"),
  17.                sm.TheResultSet.getString("precio"),
  18.                sm.TheResultSet.getString("total")});
  19.        }
  20.  
  21.        jTablePedidos.setModel(dtm);
  22.        isOk = true;
  23.    } catch (Exception e) {
  24.        e.printStackTrace();
  25.  
  26.    }
  27.    return isOk;
  28. }


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Colocar Boton de Modificar en celda de JTable
« Respuesta #1 en: 3 Octubre 2018, 19:04 pm »

Hola,

esto te puede servir



Creamos una constante tipo String para el PreparedStatement nuestra sentencia precompilada

Código
  1. private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?";

Añadimos una columna que contendrá nuestro botón

Código
  1. defaultTableModel.addColumn("Update item");

Obtenemos el nombre de la columna y le seteamos los 2 objetos de las clases que permitiran el update
Código
  1. jTable.getColumn("Update item").setCellEditor(new UpdateItem());
  2. jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado());
  3.  

Añadimos un mouseListener a la tabla para setear los valores en el form con el click , tu debes hacer el ajuste con tu código
Código
  1.  jTable.addMouseListener(new MouseAdapter() {
  2.            @Override
  3.            public void mouseClicked(MouseEvent e) {
  4.                int seletedRow = jTable.getSelectedRow();
  5.                DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
  6.                jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString());
  7.                jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString());
  8.                jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString());
  9.            }
  10.        });


Creamos una clase que extiende de JButton

Código
  1. public class BotonRenderizado extends JButton implements TableCellRenderer {
  2.  
  3.     @Override
  4.    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  5.        if (value != null) {
  6.            setText("");
  7.        } else {
  8.            setText("update");
  9.        }
  10.        if (isSelected) {
  11.            setForeground(table.getSelectionForeground());
  12.            setBackground(table.getSelectionBackground());
  13.        } else {
  14.            setForeground(table.getForeground());
  15.            setBackground(UIManager.getColor("Button.background"));
  16.        }
  17.        return this;
  18.    }
  19. }
  20.  

Aquí es donde esta la verdadera lógica del botón en la tabla desde la linea 21 a 38 es un ejemplo que te pongo, tu debes de programarlo acorde a tu código

en la linea 33 puedes usar también DbUtils para ahorrarte mas lineas de código, sirve para refrescar la tabla

Código
  1. private class UpdateItem extends AbstractCellEditor implements TableCellEditor {
  2.  
  3.        private JButton editor = new JButton();
  4.        private Object value;
  5.        private int fila;
  6.        private JTable table;
  7.  
  8.        public UpdateItem() {
  9.  
  10.            updateItem();
  11.  
  12.        }
  13.  
  14.        private void updateItem() {
  15.            editor.addActionListener(e -> {
  16.                if (table != null) {
  17.                    fireEditingStopped();
  18.                    TableModel model = table.getModel();
  19.                    if (model instanceof DefaultTableModel) {
  20.                        try {
  21.                            int getrow = table.getSelectedRow();
  22.                            final Long id = Long.valueOf(jTextFieldID.getText());
  23.                            final String firstName = jTextFirsName.getText();
  24.                            final String lastName = jTextLastName.getText();
  25.  
  26.  
  27.                            final PreparedStatement ps = connection.prepareStatement(UPDATE);
  28.                            ps.setString(1, firstName);
  29.                            ps.setString(2, lastName);
  30.                            ps.setLong(3, id);
  31.                            ps.executeUpdate();
  32.  
  33.                            //DbUtils
  34.                            model.setValueAt(id, getrow, 0);
  35.                            model.setValueAt(firstName, getrow, 1);
  36.                            model.setValueAt(lastName, getrow, 2);
  37.  
  38.                            JOptionPane.showMessageDialog(null, "Updated");
  39.  
  40.                        } catch (SQLException ex) {
  41.                            ex.printStackTrace();
  42.                        }
  43.                    }
  44.                }
  45.            });
  46.        }
  47.  
  48.        @Override
  49.        public boolean isCellEditable(EventObject e) {
  50.            return true;
  51.        }
  52.  
  53.        @Override
  54.        public Object getCellEditorValue() {
  55.            return value;
  56.        }
  57.  
  58.        @Override
  59.        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
  60.            this.table = table;
  61.            this.fila = row;
  62.            this.value = value;
  63.            if (value != null) {
  64.                editor.setText("");
  65.            } else {
  66.                editor.setText("update");
  67.            }
  68.            if (isSelected) {
  69.                editor.setForeground(table.getSelectionForeground());
  70.                editor.setBackground(table.getSelectionBackground());
  71.            } else {
  72.                editor.setForeground(table.getForeground());
  73.                editor.setBackground(UIManager.getColor("Button.background"));
  74.            }
  75.            return editor;
  76.        }
  77.    }


Código
  1. package foro;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.table.DefaultTableModel;
  5. import javax.swing.table.TableCellEditor;
  6. import javax.swing.table.TableModel;
  7. import java.awt.*;
  8. import java.awt.event.MouseAdapter;
  9. import java.awt.event.MouseEvent;
  10. import java.sql.*;
  11. import java.util.EventObject;
  12.  
  13. public class ConnectJDBCTest extends JFrame {
  14.  
  15.    private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false";
  16.    private static final String USERNAME = "root";  //mala practica
  17.    private static final String PASSWORD = "password"; // mala practica
  18.  
  19.    private static final String SELECT = "SELECT id, first_name, last_name FROM customer";
  20.    private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?";
  21.    private static final String DELETE = "DELETE FROM customer where id = ";
  22.  
  23.    private DefaultTableModel defaultTableModel = new DefaultTableModel();
  24.    private JTable jTable = new JTable(defaultTableModel);
  25.    private JScrollPane jScrollPane = new JScrollPane(jTable);
  26.    private Long id;
  27.    private String firstName;
  28.    private String lastName;
  29.  
  30.    private JTextField jTextFieldID = new JTextField(10);
  31.    private JTextField jTextFirsName = new JTextField(10);
  32.    private JTextField jTextLastName = new JTextField(10);
  33.  
  34.    private static Connection connection = null;
  35.  
  36.    public ConnectJDBCTest() {
  37.        initLayout();
  38.        initConnection();
  39.    }
  40.  
  41.    private void initLayout() {
  42.  
  43.        defaultTableModel.addColumn("Id");
  44.        defaultTableModel.addColumn("First Name");
  45.        defaultTableModel.addColumn("Last Name");
  46.        defaultTableModel.addColumn("Update item");
  47.  
  48.  
  49.        jTable.addMouseListener(new MouseAdapter() {
  50.            @Override
  51.            public void mouseClicked(MouseEvent e) {
  52.                int seletedRow = jTable.getSelectedRow();
  53.                DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
  54.                jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString());
  55.                jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString());
  56.                jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString());
  57.            }
  58.        });
  59.  
  60.        jTable.getColumn("Update item").setCellEditor(new UpdateItem());
  61.        jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado());
  62.  
  63.        final JPanel jPanel = new JPanel();
  64.        jPanel.setLayout(new BorderLayout());
  65.        jPanel.add(jScrollPane, BorderLayout.NORTH);
  66.  
  67.        final JPanel jPanelSur = new JPanel();
  68.        jPanelSur.add(new JLabel("ID"));
  69.        jPanelSur.add(jTextFieldID);
  70.        jPanelSur.add(new JLabel("First Name"));
  71.        jPanelSur.add(jTextFirsName);
  72.        jPanelSur.add(new JLabel("Last Name"));
  73.        jPanelSur.add(jTextLastName);
  74.  
  75.        jPanel.add(jPanelSur, BorderLayout.SOUTH);
  76.  
  77.        add(jPanel);
  78.  
  79.        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  80.        setLocationRelativeTo(null);
  81.        pack();
  82.        setVisible(true);
  83.    }
  84.  
  85.    private void initConnection() {
  86.        try {
  87.            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  88.            final Statement statement = connection.createStatement();
  89.            final ResultSet resultSet = statement.executeQuery(SELECT);
  90.            while (resultSet.next()) {
  91.                id = resultSet.getLong("id");
  92.                firstName = resultSet.getString("first_name");
  93.                lastName = resultSet.getString("last_name");
  94.                defaultTableModel.addRow(new Object[]{id, firstName, lastName});
  95.            }
  96.        } catch (SQLException e) {
  97.            e.printStackTrace();
  98.        }
  99.    }
  100.  
  101.    private class UpdateItem extends AbstractCellEditor implements TableCellEditor {
  102.  
  103.        private JButton editor = new JButton();
  104.        private Object value;
  105.        private int fila;
  106.        private JTable table;
  107.  
  108.        public UpdateItem() {
  109.  
  110.            updateItem();
  111.  
  112.        }
  113.  
  114.        private void updateItem() {
  115.            editor.addActionListener(e -> {
  116.                if (table != null) {
  117.                    fireEditingStopped();
  118.                    TableModel model = table.getModel();
  119.                    if (model instanceof DefaultTableModel) {
  120.                        try {
  121.                            int getrow = table.getSelectedRow();
  122.                            final Long id = Long.valueOf(jTextFieldID.getText());
  123.                            final String firstName = jTextFirsName.getText();
  124.                            final String lastName = jTextLastName.getText();
  125.  
  126.  
  127.                            final PreparedStatement ps = connection.prepareStatement(UPDATE);
  128.                            ps.setString(1, firstName);
  129.                            ps.setString(2, lastName);
  130.                            ps.setLong(3, id);
  131.                            ps.executeUpdate();
  132.  
  133.                            //DbUtils
  134.                            model.setValueAt(id, getrow, 0);
  135.                            model.setValueAt(firstName, getrow, 1);
  136.                            model.setValueAt(lastName, getrow, 2);
  137.  
  138.                            JOptionPane.showMessageDialog(null, "Updated");
  139.  
  140.                        } catch (SQLException ex) {
  141.                            ex.printStackTrace();
  142.                        }
  143.                    }
  144.                }
  145.            });
  146.        }
  147.  
  148.        @Override
  149.        public boolean isCellEditable(EventObject e) {
  150.            return true;
  151.        }
  152.  
  153.        @Override
  154.        public Object getCellEditorValue() {
  155.            return value;
  156.        }
  157.  
  158.        @Override
  159.        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
  160.            this.table = table;
  161.            this.fila = row;
  162.            this.value = value;
  163.            if (value != null) {
  164.                editor.setText("");
  165.            } else {
  166.                editor.setText("update");
  167.            }
  168.            if (isSelected) {
  169.                editor.setForeground(table.getSelectionForeground());
  170.                editor.setBackground(table.getSelectionBackground());
  171.            } else {
  172.                editor.setForeground(table.getForeground());
  173.                editor.setBackground(UIManager.getColor("Button.background"));
  174.            }
  175.            return editor;
  176.        }
  177.    }
  178.  
  179.    public static void main(String... blabla) {
  180.        final String osType = System.getProperty("os.name");
  181.        try {
  182.            if (osType.contains("Win")) {
  183.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  184.            } else if (osType.contains("Linux")) {
  185.                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
  186.            }
  187.        } catch (Exception ex) {
  188.            //do nothing
  189.        }
  190.        new Thread(() -> {
  191.            new ConnectJDBCTest();
  192.        }).start();
  193.    }
  194. }
  195.  

Selecciona primero un item, editalo , luego actualiza



« Última modificación: 11 Octubre 2018, 09:52 am por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda en colocar un botón en Mono C#
.NET (C#, VB.NET, ASP)
Meta 3 6,407 Último mensaje 16 Septiembre 2008, 22:22 pm
por MANULOMM
Cambiar el color de una celda en un JTable con Java
Java
rigoxls 0 6,649 Último mensaje 19 Enero 2010, 02:09 am
por rigoxls
programcion en excel. modificar valor en la misma celda
Dudas Generales
josco 0 2,798 Último mensaje 11 Junio 2012, 07:30 am
por josco
Como modificar una celda de una tabla JTable
Java
NaTxosS 5 3,238 Último mensaje 6 Octubre 2014, 19:04 pm
por NaTxosS
como modificar Jtable
Java
nelmaster_vc 3 6,092 Último mensaje 5 Agosto 2016, 06:28 am
por DIANA KARINA HM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines