I have a JComboBox where I want for user to select color. JComboBox is displaying just the colors, without any text. I've come up with this solution. Please advise me if this is good or it should be avoided and why. I am new to Swing and Java in general so please be patient :)
public class ToolBar{
private MainFrame mainFrame;
public ToolBar (MainFrame mainFrame) {
this.mainFrame = mainFrame;
}
public JPanel getToolBar(){
JPanel toolbarPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,2,2));
toolbarPanel.setPreferredSize(new Dimension(mainFrame.getScreenWidth(),60));
toolbarPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
JButton fillButton = new JButton("Fill: ");
fillButton.setPreferredSize(new Dimension(60,20));
//fillButton.setBackground(Color.red);
toolbarPanel.add(fillButton);
String[] test = {" ", " " , " " , " " , " " , " "};
JComboBox colorBox = new JComboBox(test);
colorBox.setMaximumRowCount(5);
colorBox.setPreferredSize(new Dimension(50,20));
colorBox.setRenderer(new MyCellRenderer());
toolbarPanel.add(colorBox);
return toolbarPanel;
}
class MyCellRenderer extends JLabel implements ListCellRenderer {
public MyCellRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
setText(value.toString());
switch (index) {
case 0: setBackground(Color.white);
break;
case 1: setBackground(Color.red);
break;
case 2: setBackground(Color.blue);
break;
case 3: setBackground(Color.yellow);
break;
case 4: setBackground(Color.green);
break;
case 5: setBackground(Color.gray);
break;
}
return this;
}
}
}
This works ok. It is displaying empty selection elements in JComboBox with different colors. Problem is that when user selects color, color of selection in JComboBox does not change. Which lines of code should I add and where so that when user selects the color from a list that color is displayed in JComboBox field?
I tried some solutions but result was that when user picks color selection in JComboBox always changes to gray...
I've looked through several similar questions but I just can't figure out which part of code is dealing with changing of color of JComboBox when the selection has been done...
Try this, should work. You have to override setBackground... because, internal mechanism uses default colors from current Look&Feel:
Color[] colors={Color.white,Color.red,Color.blue,Color.green};
JComboBox colorBox = new JComboBox(colors);
colorBox.setMaximumRowCount(5);
colorBox.setPreferredSize(new Dimension(50,20));
colorBox.setRenderer(new MyCellRenderer());
And ListCellRender:
class MyCellRenderer extends JButton implements ListCellRenderer {
public MyCellRenderer() {
setOpaque(true);
}
boolean b=false;
@Override
public void setBackground(Color bg) {
// TODO Auto-generated method stub
if(!b)
{
return;
}
super.setBackground(bg);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
b=true;
setText(" ");
setBackground((Color)value);
b=false;
return this;
}
}
ComboBox uses equals and all your strings are equal. Define color names
String[] test = {"red", "green" , "blue" ...};
But in the renderer call setText(" ");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With