Here combo cell inserts replicate the demo:

import java.awt.*; import java.awt.event.*; import java.util.EventObject; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; public class ComboCellInsetsDemo { public JComponent makeUI() { String[] columnNames = {"Name", "Check", "Condition"}; Object[][] data = { {"bbb", false, "="}, {"aaa", true, "<"} }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { @Override public Class<?> getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; JTable table = new JTable(model); table.setRowHeight(36); table.setAutoCreateRowSorter(true); TableColumn column = table.getColumnModel().getColumn(2); column.setCellRenderer(new ComboBoxCellRenderer()); column.setCellEditor(new ComboBoxCellEditor()); return new JScrollPane(table); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new ComboCellInsetsDemo().makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } } class ComboBoxPanel extends JPanel { private String[] m = new String[] {">", "<", "=", "<="}; protected JComboBox<String> comboBox = new JComboBox<String>(m) { @Override public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); return new Dimension(40, d.height); } }; public ComboBoxPanel() { super(); setOpaque(true); comboBox.setEditable(true); add(comboBox); } } class ComboBoxCellRenderer extends ComboBoxPanel implements TableCellRenderer { public ComboBoxCellRenderer() { super(); setName("Table.cellRenderer"); } @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setBackground(isSelected?table.getSelectionBackground() :table.getBackground()); if(value!=null) { comboBox.setSelectedItem(value); } return this; } } class ComboBoxCellEditor extends ComboBoxPanel implements TableCellEditor { public ComboBoxCellEditor() { super(); comboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { fireEditingStopped(); } }); addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { fireEditingStopped(); } }); } @Override public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column) { this.setBackground(table.getSelectionBackground()); comboBox.setSelectedItem(value); return this; }
source share