Affichage des articles dont le libellé est jtable. Afficher tous les articles
Affichage des articles dont le libellé est jtable. Afficher tous les articles

Java - Add Remove Buttons to JTable Rows

How to Create a JTable with Delete Button In Java Netbeans





In this Java Tutorial we will see How To Create a JTable with a custom "Remove" button in each row In Java Using Netbeans.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.





Project Source Code:


package new_tutorials;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author 1BestCsharp
 */
public class JTableWithRemoveButton {

    public static void main(String[] args) {
        
        JFrame frame = new JFrame("JTable With Remove Button");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,400);
        frame.setLocationRelativeTo(null);
        
        JTable table = createTable();
        table.setShowHorizontalLines(true);
        table.setShowVerticalLines(true);
        JScrollPane scrollPane = new JScrollPane(table);
        
        frame.add(scrollPane);
        frame.setVisible(true);
        
    }
    
    // create and customize a jtable
    private static JTable createTable(){
        // Define column names and sample data
        String[] columnNames = {"Name","Age","Remove"};
        Object[][] data = {
                {"John", 30, "Remove"},
                {"Jane", 25, "Remove"},
                {"Michael", 35, "Remove"},
                {"Emily", 28, "Remove"}
        };
        
        DefaultTableModel model = new DefaultTableModel(data,columnNames){
            /*@Override
            public boolean isCellEditable(int row, int column){
                return column == 2;
            }*/
        };
        
        // Create a JTable and customize its appearance and behavior
        JTable table = new JTable(model);
        table.setRowHeight(40);
        table.setForeground(Color.DARK_GRAY);
        table.setFont(new Font("Arial",Font.PLAIN,18));
        table.getTableHeader().setFont(new Font("Arial",Font.PLAIN,20));
        table.setDefaultRenderer(Object.class, new CenteredTableCellRenderer());
        table.getColumnModel().getColumn(2).setCellRenderer(new ButtonRenderer());
        table.getColumnModel().getColumn(2).setCellEditor(new ButtonEditor(table));
        
        
        return table;
        
    }
    
    // Create a custom TableCellRenderer for centering text in cells
    static class CenteredTableCellRenderer extends DefaultTableCellRenderer{
        
        public CenteredTableCellRenderer(){
            setHorizontalAlignment(JLabel.CENTER);
        }
        
    }
    
    // Create a custom TableCellRenderer for rendering buttons in cells
    static class ButtonRenderer extends JButton implements TableCellRenderer{

        public ButtonRenderer(){
            setOpaque(true);
            setForeground(Color.WHITE);
            setBackground(new Color(255,87,34));
        }
        
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
          
            setText((value == null) ? "" : value.toString());
            return this;
            
        }
        
    }
    
    
    // Create a custom TableCellEditor for handling button clicks and removing rows
    static class ButtonEditor extends DefaultCellEditor{
        protected JButton button;
        private String label;
        private final JTable vTable;

        public ButtonEditor(JTable table) {
            super(new JCheckBox());
            this.vTable = table;
            button = new JButton();
            button.setOpaque(true);
            
            button.addActionListener((e) -> {
               
                // remove row
                fireEditingStopped();
                int selectedRow = table.getSelectedRow();
                if(selectedRow != -1){
                    ((DefaultTableModel) vTable.getModel()).removeRow(selectedRow);
                }
                
            });
            
        }
        
         @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
          
           label = (value == null) ? "" : value.toString();
           button.setText(label);
           return button;
            
        }
                
    }
    
}



The Final Result:









Java - Show And Hide Passwords in JTable

How to Show And Hide Password Inside a JTable Cell In Java Netbeans

How to Show And Hide Password Inside a JTable Cell In Java Netbeans


In this Java Tutorial we will see How To Create a JTable allowing the user to toggle the visibility of passwords using a checkbox in the "Show-Password" column. In Java Using Netbeans.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.





Project Source Code:


package new_tutorials;

import java.awt.Component;
import java.awt.Font;
import javax.swing.AbstractCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;

/**
 *
 * @author 1BestCsharp
 */
public class PasswordTableFrame extends JFrame{

    public PasswordTableFrame(){
        
        setTitle("Password Table Frame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        setLocationRelativeTo(null);
        
        initializeUI();
        
    }
    
    private void initializeUI(){
        // Create a table with a custom table model
        JTable table = new JTable(new PasswordTableModel());
        
        // Set custom cell renderer and editor for the "Show Password" column
        table.getColumnModel().getColumn(2).setCellRenderer(new CheckBoxRenderer());
        table.getColumnModel().getColumn(2).setCellEditor(new CheckboxEditor());
        
        table.setFont(new Font("Arial",Font.PLAIN,22));
        table.setRowHeight(50);
        
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
    }
    
    public static void main(String[] args) {
        PasswordTableFrame frame = new PasswordTableFrame();
        frame.setVisible(true);
    }
    
    // Create a custom table model to handle password display
    private class PasswordTableModel extends AbstractTableModel{

        private final String[] columnNames = {"Username","Password","Show-Password"};
        private final Object[][] data = {
                {"user1", "password1", false},
                {"user2", "password2", false},
                {"user3", "password3", false},
                {"user4", "password4", false},
                {"user5", "password5", false}
        };
        
        @Override
        public int getRowCount() { return data.length; }

        @Override
        public int getColumnCount() { return columnNames.length; }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
        // Hide the password if "Show Password" is unchecked
            if(columnIndex == 1 && ! (boolean) data[rowIndex][2]){
                return "**********";
            }
            
            else{ return data[rowIndex][columnIndex]; }
            
        }
        
        @Override
        public String getColumnName(int columnIndex){
            return columnNames[columnIndex];
        }
        
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){
            return columnIndex == 2;
        }
        
        
        @Override
        public void setValueAt(Object value, int rowIndex, int columnIndex){
            // Update the "Password" column when "Show Password" checkbox is modified
            if(columnIndex == 2){
                data[rowIndex][columnIndex] = value;
                fireTableCellUpdated(rowIndex, columnIndex - 1);
            }
        }
        
    }
    
    
    // Create a custom cell renderer for the checkbox
    private class CheckBoxRenderer extends DefaultTableCellRenderer{
        private final JCheckBox checkBox = new JCheckBox();
        
        public CheckBoxRenderer(){
         
            checkBox.setHorizontalAlignment(SwingConstants.CENTER);
            
        }
        
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean  isSelected, boolean hasFocus, int row, int column){
            
            checkBox.setSelected((boolean)value);
            return checkBox;
            
        }
    }
    
    
    // Create a custom cell editor for the checkbox
    private class CheckboxEditor extends AbstractCellEditor implements TableCellEditor{

        private final JCheckBox checkBox = new JCheckBox();
        
        public CheckboxEditor(){
            checkBox.addActionListener(e -> stopCellEditing());
            checkBox.setHorizontalAlignment(SwingConstants.CENTER);
        }
        
        @Override
        public Object getCellEditorValue() {
            
            return checkBox.isSelected();
            
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        
            checkBox.setSelected((boolean) value);
            return checkBox;
            
        }
        
    }
  
}


The Final Result:

Password Inside a JTable Cell In Java

Show Password Inside a JTable Cell In Java

Show And Hide Password Inside a JTable Cell In Java








Java - Add Combobox with Images to JTable

How to Add Combobox With Icons to a JTable Cell In Java Netbeans

How to Add Combobox With Icons to a JTable Cell In Java Netbeans


In this Java Tutorial we will see How To Create a JTable with customized JComboBox cells, where the JComboBox items are rendered with images based on the job type. 
The user can interact with the JComboBox cells to select a job type from the provided options. In Java Using Netbeans.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.





Project Source Code:



package new_tutorials;

import java.awt.Component;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.AbstractCellEditor;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;

/**
 *
 * @author 1BestCsharp
 */
public class JTableComboboxWithImages extends JFrame{

    public JTableComboboxWithImages(){
        setTitle("JTable Combobox Cell WithImages");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,400);
        setLocationRelativeTo(null);
        
        initializeUI();
    }
    
    private void initializeUI(){
    
        JTable table = new JTable(new CustomTableModel());
        
        table.setRowHeight(50);
        
        table.getColumnModel().getColumn(2).setCellRenderer(new ComboboxCellRenderer());
        table.getColumnModel().getColumn(2).setCellEditor(new ComboboxCellEditor());
        
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
        
    }
    
    public static void main(String[] args) {
        JTableComboboxWithImages frame = new JTableComboboxWithImages();
        frame.setVisible(true);
    }
    
    // Method to get an array of job options
    public String[] getJobList(){
        return new String[]{"Designer","Manager","Analyst","Developer"};
    }
    
    // Custom cell renderer for the JComboBox items (JobComboBoxRenderer)
    private class JobComboBoxRenderer extends DefaultListCellRenderer{
        
        // Override method to customize the rendering of JComboBox items
        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean hasFocus){
            
            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
            
            // Set icon based on the job type
            if(value instanceof String text){
                label.setText(text);
                
                if("Designer".equals(value)){
                   label.setIcon(new ImageIcon(getClass().getResource("images/designer.png")));
                }
                else if("Developer".equals(value)){
                   label.setIcon(new ImageIcon(getClass().getResource("images/developer.png")));
                }
                else if("Manager".equals(value)){
                   label.setIcon(new ImageIcon(getClass().getResource("images/manager.png")));
                }
                else if("Analyst".equals(value)){
                   label.setIcon(new ImageIcon(getClass().getResource("images/analyst.png")));
                }
            }
            
            return label;
            
        }
        
    }
    
    // Custom cell editor for the JComboBox in the "Job" column
    private class ComboboxCellEditor extends AbstractCellEditor implements TableCellEditor{

        private final JComboBox<String> comboBox;
        
        public ComboboxCellEditor(){
            // Create and configure the JComboBox
            comboBox = new JComboBox<>(getJobList());
            comboBox.setRenderer(new JobComboBoxRenderer());
            // Add a focus listener to open the JComboBox when focused
            comboBox.addFocusListener(new FocusAdapter() {
                @Override
                public void focusGained(FocusEvent e){
                    if(e.getComponent() instanceof JComboBox){
                      ((JComboBox<?>) e.getComponent()).showPopup();
                    }
                }
            });
        }
        
        // Override method to get the edited cell value
        @Override
        public Object getCellEditorValue() { return comboBox.getSelectedItem(); }

        // Override method to get the editor component for a cell
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            
            comboBox.setSelectedItem(value);
            return comboBox;
            
        } 
    }
    
    
       // Custom cell renderer for the JComboBox in the "Job" column
    private class ComboboxCellRenderer extends DefaultTableCellRenderer{
        
        private final JComboBox<String> comboBox;
        
        public ComboboxCellRenderer(){
            comboBox = new JComboBox<>(getJobList());
            comboBox.setRenderer(new JobComboBoxRenderer());
        }
        
        
         // Override method to get the renderer component for a cell
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            
            comboBox.setSelectedItem(value);
            return comboBox;
            
        } 
        
    }
    
    
    // Custom table model for the JTable
    private class CustomTableModel extends AbstractTableModel{

        private final String[] columnNames = {"Name", "Age", "Job"};
        private final Object[][] data = {
                                            {"John", 30, "Developer"},
                                            {"Jane", 25, "Designer"},
                                            {"Michael", 35, "Manager"},
                                            {"Emily", 28, "Developer"},
                                            {"Robert", 42, "Analyst"}
                                        };
        
        
        @Override
        public int getRowCount() { return data.length; }

        @Override
        public int getColumnCount() { return columnNames.length; }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return data[rowIndex][columnIndex];
        }
        
        @Override
        public String getColumnName(int columnIndex){
            return columnNames[columnIndex];
        }
        
        @Override
        public Class<?> getColumnClass(int columnIndex){
            return columnIndex == 2 ? String.class : Object.class;
        }
        
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){ return columnIndex == 2; }
        
        @Override
        public void setValueAt(Object value, int rowIndex, int columnIndex){
            data[rowIndex][columnIndex] = value;
            fireTableCellUpdated(rowIndex, columnIndex);
        }
        
    }

}



The Final Result:

Java - Add Combobox with Images to JTable