2012-12-02 2 views
0

S'il vous plaît jeter un oeil sur le code suivantComment changer la couleur de l'article sélectionné de JComboBox?

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 

public class JCombo extends JFrame 
{ 
    JComboBox com1,com2; 

    public JCombo() 
    { 


     com1 = new JComboBox(); 
     com2 = new JComboBox(); 

     com1.addItem("One"); 
     com1.addItem("two"); 
     com1.addItem("Three"); 

     com2.addItem("Clothe"); 
     com2.addItem("Food"); 
     com2.addItem("Drinks"); 
     com2.addItemListener(new Com2Action()); 

     this.setLayout(new FlowLayout()); 
     this.add(com1); 
     this.add(com2); 

     this.pack(); 
     this.validate(); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private class Com2Action implements ItemListener 
    { 
     public void itemStateChanged(ItemEvent ae) 
     { 
      if(ae.getStateChange() == ItemEvent.SELECTED) 
      { 
       com1.getSelectedItem(); 
      } 
     } 
    } 

    public static void main(String[]args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      new JCombo(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 
} 

Maintenant ici, ce que je dois faire est la suivante.

  1. Sélectionnez un élément de com2
  2. Sélectionnez l'élément qui est en com1, au moment où vous sélectionnez un élément de com2. Cette mise en évidence doit être permanente (ce qui signifie que la surbrillance ne doit pas disparaître lorsque l'utilisateur clique à nouveau sur le com1)

EX: vous sélectionnez 'Food' dans com2. À ce moment-là, 'One' est affiché dans com1. Donc, mettez-le en évidence

Comment puis-je faire cela? S'il vous plaît aider!

+1

'' JComboBox' utilise un SingleSelectionModel' donc une seule sélection peut se faire, à la fois. Sur 'JList' ceci peut être fait. – Mordechai

+0

élément sélectionné dans la liste déroulante ??, lorsque popup est développé ?? – mKorbel

+0

Je pense que vous n'avez pas compris ce que je dis. Je veux mettre en évidence l'élément dans com1, lorsqu'une action dans com2 effectuée. Pour un exemple, vous sélectionnez "Food" de com2. À ce moment-là, 'One' est affiché dans com1. Donc, mettez-le en surbrillance –

Répondre

0

Set renderer personnalisé à l'aide JComboBox.setRenderer (ListCellRenderer aRenderer)

+0

OK, alors? ...... \ –

2

il y a deux façons

  • changement valeur clés dans UIManager

  • override isSelected dans DefaultListCellRenderer

par exemple

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Component; 
import javax.swing.*; 

public class ComboRendererTest { 

    public ComboRendererTest() { 
     JComboBox comboBox = new JComboBox(); 
     comboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXX"); 
     comboBox.addItem(new Double(1)); 
     comboBox.addItem(new Double(2.25)); 
     comboBox.addItem(new Double(3.5)); 
     comboBox.setRenderer(new TwoDecimalRenderer(comboBox.getRenderer())); 
     comboBox.setEditable(true); 

     JComboBox comboBox1 = new JComboBox(); 
     comboBox1.setPrototypeDisplayValue("XXXXXXXXXXXXXXXX"); 
     comboBox1.addItem(new Double(1)); 
     comboBox1.addItem(new Double(2.25)); 
     comboBox1.addItem(new Double(3.5)); 
     comboBox1.setRenderer(new TwoDecimalRenderer(comboBox.getRenderer())); 
     comboBox1.setEditable(true); 

     JFrame frame = new JFrame(); 
     frame.add(comboBox, BorderLayout.NORTH); 
     frame.add(comboBox1, BorderLayout.SOUTH); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) throws Exception { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ComboRendererTest comboRendererTest = new ComboRendererTest(); 
      } 
     }); 
    } 
} 

class TwoDecimalRenderer extends DefaultListCellRenderer { 

    private ListCellRenderer defaultRenderer; 

    public TwoDecimalRenderer(ListCellRenderer defaultRenderer) { 
     this.defaultRenderer = defaultRenderer; 
    } 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) { 
     Component c = defaultRenderer.getListCellRendererComponent(
       list, value, index, isSelected, cellHasFocus); 
     if (c instanceof JLabel) { 
      if (isSelected) { 
       c.setBackground(Color.blue); 
      } else { 
       c.setBackground(Color.red); 
      } 
     } else { 
      c.setBackground(Color.red); 
      c = super.getListCellRendererComponent(
        list, value, index, isSelected, cellHasFocus); 
     } 
     return c; 
    } 
} 
Questions connexes