我有一个问题,使JComboBox透明。我尝试设置不透明为false和背景0的alpha,但它不起作用。我想我需要改变一些类,做渲染或类似的东西。这是代码...
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import javax.swing.plaf.basic.BasicComboBoxUI;
import java.awt.Color;
public class App {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
App window = new App();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public App() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(Color.GREEN);
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
JComboBox comboBox = new JComboBox(petStrings);
comboBox.setBounds(149, 99, 155, 20);
comboBox.setOpaque(false);
//comboBox.setBackground(new Color(0,0,0,0));
((JTextField)comboBox.getEditor().getEditorComponent()).setOpaque(false);
comboBox.setUI(new BasicComboBoxUI(){
public void paintCurrentValueBackground(Graphics g,Rectangle bounds,boolean hasFocus){}});
frame.getContentPane().add(comboBox);
}
}
你需要预先设定这几件事
jcombo.setOpaque(false);
jcombo.setContentAreaFilled(false);
jcombo.setBorderPainted(false);
JComboBox myComboBox = new JComboBox(array);
myComboBox .setOpaque(false);
myComboBox .setEditable(true);
JTextField boxField = (JTextField)myComboBox .getEditor().getEditorComponent();
boxField.setBorder(BorderFactory.createEmptyBorder());
boxField.setBackground(new Color(0, 0, 0, 0));
boxField.setFocusable(false);
答案就在这里http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6687960
假设您只想让组合框的文本字段透明(而不是弹出窗口),那么使用以下代码应该可以。您需要处理组合框渲染器,而不是编辑器。编辑器用于确定是否可以在组合框中键入内容;如果组合框仅为值列表,则使用渲染器。
comboBox.setOpaque(false);
comboBox.setRenderer(new DefaultListCellRenderer(){
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JComponent result = (JComponent)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
result.setOpaque(false);
return result;
}});
介绍 (Introduction) JComboBox类是一个组合按钮或可编辑字段和下拉列表的组件。 Class 声明 (Class Declaration) 以下是javax.swing.JComboBox类的声明 - public class JComboBox extends JComponent implements ItemSelectable, ListDataLis
问题内容: 我正在尝试结合2个jcombobox。1个组合框用于显示费用类别。第二个组合框正在从文本文件读取文件以显示产品类型。如果我更改第一个组合框,我希望第二个组合框将根据用户在第一个组合框中的选择进行更改。 我是否仍有可能从文本文件加载其他组合框?该子项将不是Arrays,而是与以前相同,因为它位于cboperson代码的底部。 编辑的代码: 问题答案: 例如
主要内容:1 Java JComboBox的介绍,2 Java JComboBox的声明,3 Java JComboBox的构造方法,4 Java JComboBox的方法,5 Java JComboBox的案例1,6 Java JComboBox的案例21 Java JComboBox的介绍 Choice类的对象用于显示选项的弹出菜单。用户选择的选项显示在菜单顶部。它继承了JComponent类。 2 Java JComboBox的声明 我们来看一下javax.swing.JComboBox类
问题内容: 是否可以在JComboBox中定义与实际内容不同的值? 在HTML中,其外观如下: 无论内容多长时间,都可以在此处获得一个短值。 在Java中,我只知道以下解决方案: 但是在这里,我只会得到“ Cat”,“ Dog”等信息 。问题是,我要将客户的所有名称从数据库加载到JComboBox中,然后从所选客户中检索ID。它看起来应该像这样: 问题答案: 如果创建Customer类并将Cust
问题内容: 我正在使用a 从sql数据库搜索查询。这是我的代码。 = JComboBox 但是,当我在组合框中键入一个字母时,它将添加数据库中的所有项目。我知道总是给出一个空字符串。而且,只要我键入一个字母,组合框的文本字段就会为空(我不能键入两个字母的单词)。如何解决这个问题?谢谢。 问题答案: 问题的原因如下: 始终为空是因为您在打电话之前先打电话。这意味着,在获得所选内容之前,将清除(与所选
我正在尝试制作一个JTable,它在一个单元格中有一个JComboBox。我知道我可以使用celleditor,但诀窍是我希望在每一行的组合框中有不同的信息。表中的每一行都代表一个对象,在该对象上有一个arraylist和它的内容,我想在组合框中。到目前为止,这是我的思考过程。 现在,当我稍后调用该方法时(通过按一个按钮),我想插入一个新的行,其中包含Coloum5中唯一的组合框,但我不知道如何做