删除 JTable 中的 JCombobox 边框
Remove JCombobox border inside JTable
我删除了 JComoboBox
中的箭头按钮,使其看起来像 JTextField
,并将其添加为 celleditor。目的是创建一个 AutoSuggest(不是 AutoComplete)JTable 单元格。
在这样做时,边框看起来有点像 irking.How 更改边框,使其看起来像右侧的文本框边框。我试过删除边框创建的线条边框。但它并没有去除蓝色边框。
使用 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() {
}
});
}
}
}
Using Nimbus UI
也许这会对您有所帮助:Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
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<String> {
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<JComponent> emptyPainter = new Painter<JComponent>() {
@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));
}
}
我删除了 JComoboBox
中的箭头按钮,使其看起来像 JTextField
,并将其添加为 celleditor。目的是创建一个 AutoSuggest(不是 AutoComplete)JTable 单元格。
在这样做时,边框看起来有点像 irking.How 更改边框,使其看起来像右侧的文本框边框。我试过删除边框创建的线条边框。但它并没有去除蓝色边框。
使用 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() {
}
});
}
}
}
Using Nimbus UI
也许这会对您有所帮助:Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
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<String> {
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<JComponent> emptyPainter = new Painter<JComponent>() {
@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));
}
}