【发布时间】:2021-01-03 11:59:31
【问题描述】:
当前尝试生成带有字符串列表的 ComboBox,并希望这些字符串值具有一定的不透明度。 CombobBox 本身应该保持正常,只有数据发生变化。
通过实现我自己的自定义类,我能够使用我的图标组合框来实现这一点。
///This works great when ICons are used within the JComboBox
class MyImageIconObject extends ImageIcon
{
float x;
ImageIcon ic;
public MyImageIconObject(String iconLocation)
{
super(iconLocation);
this.ic = new ImageIcon(iconLocation);
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y)
{
//super.paintIcon(c, g, x, y);
((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f));
ic.paintIcon(c, g, x, y);
System.out.println("Painting 2");
}
}
以上代码生成如下结果。
不能对 Strings 执行此操作,因为它是一个 Final 类,但即使我可以,也没有可覆盖的 paint() 类型函数。
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JComboBoxWithStrings extends JFrame
{
private JComboBox comboBox;
JPanel topPanel;
String[] arrayOfStrings = {"String 1", "Entry 2", "More data", "Entry 10000"};
public JComboBoxWithStrings ()
{
}
public static void main(String[] args)
{
JComboBoxWithStrings T = new JComboBoxWithStrings();
T.createGUI();
T.setVisible(true);
}
public void createGUI(){
setMinimumSize(new Dimension(500,500));
setTitle("Demo");
setLocation(200, 200);
topPanel = new JPanel();
getContentPane().add(topPanel, BorderLayout.CENTER);
comboBox = new JComboBox(arrayOfStrings);
topPanel.add(comboBox);
super.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
}
}
上面的代码生成如下:
需要什么才能控制 ComboBox 中显示的字符串的不透明度同时保持 ComboBox 本身正常?
【问题讨论】:
-
其实没那么难。您需要创建一个自定义 ListCellRenderer 并在 JCombo 上使用 setRenderer 和一个实例:docs.oracle.com/javase/8/docs/api/javax/swing/…
-
添加渲染器是有意义的,但不透明度的设置是否与图标的设置方式相似?据我所见,大多数示例都涉及通过手动设置背景/前景来模仿行为。
-
@camickr 为您发布了解决方案
标签: java string swing combobox opacity