删除JTable中的JCombobox边框

我从JComoboBox删除了箭头按钮,使其看起来像JTextField ,并将其添加为celleditor。 目的是创建一个AutoSuggest(非自动完成)JTable单元。

在这样做的边界有点看起来像irking。如何更改边框使其看起来像右侧的文本域边框。 我试过删除边框创建的线条边框。 但它没有移除蓝色边界。

使用Nimbus UI。

在此处输入图像描述

MCVE的问题

 import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.UIManager; public class Sample extends JFrame { public Sample() { init(); } private void init() { JTable table = new JTable(5, 5); DefaultCellEditor cellEditor = new DefaultCellEditor(new EditorCombo()); cellEditor.setClickCountToStart(2); table.getColumnModel().getColumn(0) .setCellEditor(cellEditor); table.setRowHeight(30); table.setCellSelectionEnabled(true); add(new JScrollPane(table)); } public static void main(String[] args) { setUpUI("Nimbus"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Sample samp = new Sample(); samp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); samp.setTitle("Table Test"); samp.pack(); samp.setLocationRelativeTo(null); samp.setVisible(true); } }); } private static void setUpUI(String ui) { try { for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if (ui.equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) { Logger.getLogger(Sample.class.getName()).log(Level.SEVERE, null, ex); } } class EditorCombo extends JComboBox { public EditorCombo() { setEditable(true); for (int i = 0; i < 10; i++) { addItem("Sample" + i); } setUI(new javax.swing.plaf.synth.SynthComboBoxUI() { @Override protected JButton createArrowButton() { JButton button = new JButton() { @Override public int getWidth() { return 0; } }; button.setBorder(BorderFactory.createEmptyBorder()); button.setVisible(false); return button; } @Override public void configureArrowButton() { } }); } } } 

使用Nimbus UI

也许这会对你有所帮助: Nimbus默认值(Java™教程>使用JFC / Swing创建GUI>修改外观)

  • TextField[Focused].borderPainter
  • TextField[Enabled].borderPainter
  • ComboBox:\"ComboBox.textField\"[Enabled].backgroundPainter
  • ComboBox:\"ComboBox.textField\"[Selected].backgroundPainter
 import java.awt.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; public class Sample2 extends JFrame { public Sample2() { init(); } private void init() { JTable table = new JTable(5, 5); DefaultCellEditor cellEditor = new DefaultCellEditor(new EditorCombo()); cellEditor.setClickCountToStart(2); table.getColumnModel().getColumn(0).setCellEditor(cellEditor); table.setRowHeight(30); table.setCellSelectionEnabled(true); add(new JScrollPane(table)); } public static void main(String[] args) { setUpUI("Nimbus"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Sample2 samp = new Sample2(); samp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); samp.setTitle("Table Test"); samp.pack(); samp.setLocationRelativeTo(null); samp.setVisible(true); } }); } private static void setUpUI(String ui) { try { for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if (ui.equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { Logger.getLogger(Sample2.class.getName()).log(Level.SEVERE, null, ex); } } } class EditorCombo extends JComboBox { public EditorCombo() { super(); setEditable(true); for (int i = 0; i < 10; i++) { addItem("Sample" + i); } } @Override public void updateUI() { //super.updateUI(); setUI(new javax.swing.plaf.synth.SynthComboBoxUI() { @Override protected JButton createArrowButton() { JButton button = new JButton() { @Override public int getWidth() { return 0; } }; button.setBorder(BorderFactory.createEmptyBorder()); button.setVisible(false); return button; } @Override public void configureArrowButton() { } }); UIDefaults d = new UIDefaults(); // putClientProperty("Nimbus.Overrides", d); // putClientProperty("Nimbus.Overrides.InheritDefaults", false); // JComponent c = (JComponent) getEditor().getEditorComponent(); // c.putClientProperty("Nimbus.Overrides", d); // c.putClientProperty("Nimbus.Overrides.InheritDefaults", false); // c.setBorder(BorderFactory.createLineBorder(Color.BLACK)); Painter emptyPainter = new Painter() { @Override public void paint(Graphics2D g, JComponent c, int w, int h) { /* Empty painter */ } }; d.put("TextField.borderPainter", emptyPainter); d.put("TextField[Enabled].borderPainter", emptyPainter); d.put("TextField[Focused].borderPainter", emptyPainter); d.put("ComboBox:\"ComboBox.textField\"[Enabled].backgroundPainter", emptyPainter); d.put("ComboBox:\"ComboBox.textField\"[Selected].backgroundPainter", emptyPainter); d.put("ComboBox[Editable+Focused].backgroundPainter", emptyPainter); putClientProperty("Nimbus.Overrides", d); JComponent c = (JComponent) getEditor().getEditorComponent(); c.putClientProperty("Nimbus.Overrides", d); c.setBorder(BorderFactory.createLineBorder(Color.BLACK)); } }