Java JTable change cell color

后端 未结 7 1524
说谎
说谎 2020-11-30 14:14

I would like to make an editable table and then check the data to make sure its valid. Im not sure how to change the color of just one cell. I would like to get a cell, for

7条回答
  •  眼角桃花
    2020-11-30 14:31

    I would like to make an editable table and then check the data to make sure its valid.

    Another approach would be to edit the data before it is saved to the table model to prevent invalid data from being entered.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    
    public class TableEdit extends JFrame
    {
        TableEdit()
        {
            JTable table = new JTable(5,5);
            table.setPreferredScrollableViewportSize(table.getPreferredSize());
    
            JScrollPane scrollpane = new JScrollPane(table);
            getContentPane().add(scrollpane);
    
            //  Use a custom editor
    
            TableCellEditor fce = new FiveCharacterEditor();
            table.setDefaultEditor(Object.class, fce);
        }
    
        class FiveCharacterEditor extends DefaultCellEditor
        {
            FiveCharacterEditor()
            {
                super( new JTextField() );
            }
    
            public boolean stopCellEditing()
            {
                try
                {
                    String editingValue = (String)getCellEditorValue();
    
                    if(editingValue.length() != 5)
                    {
                        JTextField textField = (JTextField)getComponent();
                        textField.setBorder(new LineBorder(Color.red));
                        textField.selectAll();
                        textField.requestFocusInWindow();
    
                        JOptionPane.showMessageDialog(
                            null,
                            "Please enter string with 5 letters.",
                            "Alert!",JOptionPane.ERROR_MESSAGE);
                        return false;
                    }
                }
                catch(ClassCastException exception)
                {
                    return false;
                }
    
                return super.stopCellEditing();
            }
    
            public Component getTableCellEditorComponent(
                JTable table, Object value, boolean isSelected, int row, int column)
            {
                Component c = super.getTableCellEditorComponent(
                    table, value, isSelected, row, column);
                ((JComponent)c).setBorder(new LineBorder(Color.black));
    
                return c;
            }
    
        }
    
        public static void main(String [] args)
        {
            JFrame frame = new TableEdit();
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo( null );
            frame.setVisible(true);
        }
    }
    

提交回复
热议问题