我想要一个没有箭头按钮(完成)的JComboBox,启用时具有绿色背景,禁用时具有灰色背景(未完成)。我还为下拉列表使用了自定义渲染器(完成)
我检查了BasicComboBoxUI的源代码,并尝试覆盖某些方法,但没有任何反应。下拉菜单始终具有灰色/蓝色背景。
这是我最后一次尝试的SSCCE。我尝试了所有我能想到的。请给我一个提示,我迷路了。
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicComboBoxUI;
public class DropDownBackground
{
public static void main(final String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
final JComboBox dropdown = new JComboBox(new DefaultComboBoxModel(new String[] { "one", "two", "three" }));
dropdown.setRenderer(new ComboBoxListCellRenderer());
dropdown.setUI(new BasicComboBoxUI()
{
@Override
public void paint(final Graphics g, final JComponent c)
{
final Rectangle r = this.rectangleForCurrentValue();
this.paintCurrentValueBackground(g, r, true);
this.paintCurrentValue(g, r, true);
}
@Override
public void paintCurrentValueBackground(final Graphics g, final Rectangle bounds, final boolean hasFocus)
{
final Color t = g.getColor();
if (this.comboBox.isEnabled())
g.setColor(Color.GREEN);
else
g.setColor(Color.GRAY);
g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
g.setColor(t);
}
@Override
protected JButton createArrowButton()
{
return new JButton()
{
@Override
public int getWidth()
{
return 0;
}
};
}
});
dropdown.setBackground(Color.GREEN);
final JPanel p = new JPanel();
p.add(dropdown);
final JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(p));
f.setSize(800, 200);
f.setLocation(0, 0);
f.setVisible(true);
}
});
}
public static class ComboBoxListCellRenderer extends DefaultListCellRenderer
{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus)
{
this.setToolTipText((String) value);
if (isSelected)
{
this.setBackground(Color.RED);
this.setForeground(Color.WHITE);
}
else
{
this.setBackground(Color.WHITE);
this.setForeground(Color.BLACK);
}
this.setText((String) value);
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
return this;
}
}
}
由于我想让这个颜色应用程序更广泛,所以这是最好的方法:
UIManager.put("ComboBox.background", new ColorUIResource(UIManager.getColor("TextField.background")));
UIManager.put("ComboBox.foreground", new ColorUIResource(UIManager.getColor("TextField.foreground")));
UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.GREEN));
UIManager.put("ComboBox.selectionForeground", new ColorUIResource(Color.WHITE));
如果要自定义更多(禁用的颜色等),则UIManager属性的此列表可能会很有用:http
:
//www.rgagnon.com/javadetails/JavaUIDefaults.txt
问题内容: 我学习Java已有几周了,在将背景图像应用于JFrame时,我真的很困惑。我遇到的每个教程都不像我那样创建Frames(我扩展了JFrame),或者如果这样做,说明还不够清楚,我无法理解。 下面的代码来自我自己的项目,因此可以帮助我练习到目前为止所学的内容。请您能否以下面的代码为基础,并向我说明要添加的内容和位置,所以我可能以图像作为框架的背景? 我真正要感谢的一件事是,如果您能解释事
所以在我的项目中,我只是想让背景文件有一个gif播放,让它看起来更好,但是我找到的每个解决方案都不起作用。我在JLabel上制作gif,然后将所有内容都添加到JLabel上的解决方案不起作用,项目运行了,但是屏幕上没有显示任何内容。我把gif叫做 我的主长这样 我在乞讨中扩展了JPanel。我添加了一堆盒子,这些盒子有一堆JButton 这有可能吗?
我正在尝试使用java swing创建一个tic-tac-toe游戏。我创建了一个框架,并将其背景设置为一种颜色。问题是框架的背景色没有改变,我尝试使用其他颜色,但背景色总是白色。以下是代码:
问题内容: 我已经使用Java Swing创建了一个GUI。我现在必须将一个sample.jpeg图像设置为放置组件的框架的背景,该怎么做? 问题答案: 实现此目的的一种方法是重写paintComponent每次JPanel刷新时绘制背景图像的方法。 例如,可以将子类化JPanel,并添加一个字段以保存背景图片,然后覆盖该paintComponent方法: (以上代码尚未经过测试。) 以下代码可用
我想在内部设置一个的。 我试着用 但这不起作用。我怎么能这么做?
问题内容: 我正在编程扩展JComboBox的自定义组件。我的问题是,如果我要添加或删除项目,PopupMenu不会实现其大小。因此,例如,列表中有2个项目,但是如果在PopupMenu中还有2个“空”项目之前还有4个项目。 我发现的唯一解决方法是(在JIntelligentComboBox.java第213行中) 但结果将是闪烁的PopupMenu :-( 那么我还能做些什么来刷新/重画Popu