5

1. ユーザーが JComboBox からアイテムを選択すると、JComboBox と Jtable が作成され、JTable に追加されます。
2. ユーザーが JComboBox で以前に選択したアイテムを選択できるようにしたくありません。
3.したがって、選択した選択肢は無効にする必要があります(選択不可)。どうすればいいですか?4.以下のコードは、JTableに追加された後、選択されたアイテムを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);
4

2 に答える 2

5

無効にする必要のある要素を含むリストがあるとします。無効な要素の外観を変更し、ユーザーがそれらの項目を選択できないようにする必要があります。ユーザーが無効なものを選択できないようにするには、次のようなsetSelectedIndexメソッドをオーバーライドする必要があります。JComboBox

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

BasicComboBoxRendererまた、次のようにアイテムの色を変更できます。

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

詳しくは.

于 2013-02-13T11:35:40.073 に答える
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);

}

于 2014-04-03T13:03:32.903 に答える