2013-02-13 28 views
5

1.Po utworzeniu JComboBox i Jtable, gdy użytkownik wybierze elementy z JComboBox są one dodawane w JTable.
2.Nie chcę pozwolić użytkownikowi na wybranie pozycji, które zostały wcześniej wybrane przez niego w JComboBox.
3. Tak, wybrane opcje muszą być wyłączone (nie można wybrać). Jak mam to zrobić? 4. poniżej kod usuwa że wybrany element z JComboBox po to został dodany w JTable ale jestem zainteresowany Wyłączenie goWyłącz elementy JComboBox w czasie wykonywania

 String getchoice=(String)selectedgames_combobox.getSelectedItem(); 

     DefaultTableModel gamesmodel = new DefaultTableModel(); 

     //adding selected choices from JComboBox in JTable 
     gamesmodel.addColumn("Selected Games");  
     gamesmodel.insertRow(gamesmodel.getRowCount(),new Object[]{ getchoice }) ; 

     //refreshing table 
     games_table.setModel(gamesmodel); 

     //removing the selected item from JComboBox 
     selectedgames_combobox.removeItem(getchoice); 
+0

także zobaczyć [Wyłączenie elementów w JList] (http://stackoverflow.com/a/8344497/1048330) – tenorsax

+0

Zobacz także [Jak wyłączyć niektóre elementy w JComboBox] (https://stackoverflow.com/questions/23722706/how-to-disable-certain-items-in-a-jcombobox). –

Odpowiedz

5

Załóżmy, że masz listę, która zawiera pewne elementy, które powinny być wyłączone, trzeba zmienić wygląd wyłączonych elementów i uniemożliwić użytkownikowi wybór tych elementów. Aby móc zapobiec użytkownikowi wybrać te niepełnosprawne trzeba zastąpić setSelectedIndex metodę JComboBox tak:

public void setSelectedIndex(int index) { 
    if (!disabled_items.contains(index)) { 
     super.setSelectedIndex(index); 
    } 
} 

Ponadto można zmieniać kolory przedmiotów w BasicComboBoxRenderer tak:

if (disabled_items.contains(index)) { 
    setBackground(list.getBackground()); 
    setForeground(UIManager.getColor("Label.disabledForeground")); 
} 

For further details.

+0

Tak widziałem ten przykład, ale jak to zrobić w czasie wykonywania. – Akki

+0

Może istnieć inny wątek sterujący runtime wyłączające żądania, które powinny być oddzielone od głównego wątku. Sprawdź proste animacje 2D ze swingiem. –

+0

Mimo że odpowiedź jest prawidłowa, [Odpowiedzi dotyczące tylko łącza są odradzane w StackOverflow] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good- odpowiedzi). Link może być ważny dzisiaj, ale nie ma gwarancji, że pozostanie w ten sposób. Proszę skopiować najważniejsze części (nie całe wpisy w blogu!) Lub wyjaśnić je własnymi słowami. Dzięki. – DarkDust

0

Oto moje rozwiązanie (może być przydatna)

/** 
* A ComboBox with Enabling/disabling items support 
*/ 
public class AvailableItemComboBox extends JComboBox { 
    private static final long serialVersionUID = 1L; 

    // previosly chosen item 
    protected int old = -1; 

    /** 
    * Default constructor 
    */ 
    public AvailableItemComboBox() { 
     super(); 
     setRenderer(new EnabledJComboBoxRenderer());  
     initializeComboBox(); 
    } 

    /** 
    * Constructor with model 
    * 
    * @param model 
    */ 
    public AvailableItemComboBox(ComboBoxModel model) { 
     super(model); 
     setRenderer(new EnabledJComboBoxRenderer()); 
     initializeComboBox(); 
     System.out.println("selected index is " + getSelectedIndex()); 
    } 

    /** 
    * Constructor with data 
    * 
    * @param model 
    */ 
    public AvailableItemComboBox(Available[] items) { 
     super(items); 
     setRenderer(new EnabledJComboBoxRenderer()); 
     initializeComboBox(); 
     System.out.println("selected index is " + getSelectedIndex()); 
    } 

    private void initializeComboBox() { 
     setSelectedIndex(findFirstAvailableItem()); 

     addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) {  
       System.out.println("Listener called>>>>>>>>>>>>>>>>>>");     
       if (old != getSelectedIndex()) { 
        if (!((Available) getSelectedItem()).isEnabled()) { 
         setSelectedIndex(old); 
        } else { 
         old = getSelectedIndex(); 
        } 
       } 
      }  
     }); 
    } 

    // Finds first selecteditem and sets it as previous state 
    private int findFirstAvailableItem() { 
     int result = -1; 

     for (int index = 0; index < this.getItemCount(); index++) { 
      if (((Available)this.getItemAt(index)).isEnabled()) { 
       result = index; 
       break; 
      } 
     } 

     old = result; 
     return result; 
    } 
} 

public class EnabledJComboBoxRenderer extends BasicComboBoxRenderer { 
private static final long serialVersionUID = 1L; 

private Color disabledColor = Color.lightGray; 

/** 
* Constructs a new renderer for a JComboBox which enables/disables items 
* based upon the parameter model. 
* 
* @param enabled 
*/ 
public EnabledJComboBoxRenderer(){ 
    super();   
} 

/** 
* Sets the color to render disabled items. 
* 
* @param disabledColor 
*/ 
public void setDisabledColor(Color disabledColor){ 
    this.disabledColor = disabledColor; 
} 

/** 
* Custom implementation to color items as enabled or disabled. 
* 
* @inheritDoc 
*/ 
@Override 
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 

    boolean enabled = ((Available) value).isEnabled(); 

    if (!enabled) { 
     if (isSelected) { 
      c.setBackground(UIManager.getColor("ComboBox.background")); 
     } else { 
      c.setBackground(super.getBackground()); 
     } 
     c.setForeground(disabledColor); 
    } else { 
     c.setBackground(super.getBackground()); 
     c.setForeground(super.getForeground()); 
    } 

    return c; 
} 

}

public interface Available { 
public boolean isEnabled(); 
public void setEnabled(boolean enable); 

}

Powiązane problemy