我怎样才能摆脱 JCombobox 中的蓝色突出显示?
How can i get rid of the blue highlight inside JCombobox?
JCombobox 的“内容”window 有蓝色突出显示,我不知道如何去除,请帮忙。
这里是问题的一个例子:
package example;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(1);
frame.setSize(500, 500);
frame.setLayout(new CardLayout());
frame.setVisible(true);
JPanel panel=new JPanel();
panel.setLayout(null);
frame.add(panel);
String[] model = {"pres.", "PPS.", "P. inp.", "P. mais q."};
JComboBox combox;
combox = new JComboBox(model);
combox.setBounds(100, 100, 145, 30);
combox.setBackground(new Color(215, 211, 165));
combox.setFocusable(false);
panel.add(combox);
panel.updateUI();
}
}
组合框是一个内部使用多个组件的复杂组件。 UI 决定组件如何相互作用。
例如,将您的代码更改为以下内容:
JComboBox combox;
combox = new JComboBox(model);
combox.setBorder( new LineBorder(Color.YELLOW) );
BasicComboBoxRenderer renderer = new BasicComboBoxRenderer();
renderer.setBorder( new LineBorder(Color.RED) );
combox.setRenderer(renderer);
您会注意到蓝色突出显示不是组合框或其渲染的边框,这意味着还有另一个我们无法访问的内部容器。
如果你真的想解决这个问题,那么你将需要自定义MetalComboBoxUI
class,这绝非易事,因为许多绘画方法都是私有的。不过看看class的代码,看看能不能搞定。
您的代码的其他问题:
不要使用 updateUI()
。当 LAF 更改时,该方法在 Swing 内部调用。您没有更改 LAF
应在框架可见之前将组件添加到框架中。这将消除对 updateUI().
的需要
JCombobox 的“内容”window 有蓝色突出显示,我不知道如何去除,请帮忙。
这里是问题的一个例子:
package example;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(1);
frame.setSize(500, 500);
frame.setLayout(new CardLayout());
frame.setVisible(true);
JPanel panel=new JPanel();
panel.setLayout(null);
frame.add(panel);
String[] model = {"pres.", "PPS.", "P. inp.", "P. mais q."};
JComboBox combox;
combox = new JComboBox(model);
combox.setBounds(100, 100, 145, 30);
combox.setBackground(new Color(215, 211, 165));
combox.setFocusable(false);
panel.add(combox);
panel.updateUI();
}
}
组合框是一个内部使用多个组件的复杂组件。 UI 决定组件如何相互作用。
例如,将您的代码更改为以下内容:
JComboBox combox;
combox = new JComboBox(model);
combox.setBorder( new LineBorder(Color.YELLOW) );
BasicComboBoxRenderer renderer = new BasicComboBoxRenderer();
renderer.setBorder( new LineBorder(Color.RED) );
combox.setRenderer(renderer);
您会注意到蓝色突出显示不是组合框或其渲染的边框,这意味着还有另一个我们无法访问的内部容器。
如果你真的想解决这个问题,那么你将需要自定义MetalComboBoxUI
class,这绝非易事,因为许多绘画方法都是私有的。不过看看class的代码,看看能不能搞定。
您的代码的其他问题:
不要使用
updateUI()
。当 LAF 更改时,该方法在 Swing 内部调用。您没有更改 LAF应在框架可见之前将组件添加到框架中。这将消除对 updateUI().
的需要