2013-02-13 12 views
5

1. JComboBoxから項目を選択したときにJComboBoxとJtableを作成しました.JComboBoxで追加された項目です。
2.JComboBoxで以前に選択したアイテムをユーザーが選択できるようにしたくありません。
3.選択した選択肢を無効にする必要があります(選択不可)。私はどのようにこれを行う必要がありますか?コードの下4。が、それはJTableの中に追加された後のJComboBoxから項目を選択したことを削除しますが、あなたは無効にすべきいくつかの要素を含むリストを持っていると仮定し、私はそれ実行時にJComboBoxの項目を無効にする

 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

またhttp://stackoverflow.com/a([JListの項目を無効にする]を参照され/ 8344497/1048330) – tenorsax

+0

[JComboBoxの特定の項目を無効にする方法](https://stackoverflow.com/questions/23722706/how-to-disable-certain-items-in-a-jcombobox)を参照してください。 –

答えて

5

を無効に興味を持って、あなたがする必要があります無効にされた要素のアピールを変更し、ユーザーがこれらの項目を選択するのを防ぐ必要があります。

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

For further details

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

また、あなたはこのようにBasicComboBoxRenderer内の項目の色を変更することができます:あなたはこのようなJComboBoxsetSelectedIndexメソッドをオーバーライドする必要が無効なものを選択するようにユーザーを防ぐことができるようにします。ここ

+0

はい、私はこの例を見ましたが、これを実行時に実行する方法はあります。 – Akki

+0

実行時の無効化要求を制御する別のスレッドが、メインスレッドから分離される必要があります。スイングで簡単な2Dアニメーションを確認してください。 –

+0

答えは正しいが、[リンクのみの回答はStackOverflowでは推奨されていない](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-答え)。リンクは今日有効かもしれませんが、それがそのままそのままになるという保証はありません。 _ほとんどの重要な部分をコピーしてください(ブログの全部ではありません!)か、自分の言葉で説明してください。ありがとう。 – DarkDust

0

は私の溶液(有用であるかもしれない)

/** 
* 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); 

}

関連する問題