2015-04-22 3 views
1

Я использую массив строк, чтобы заполнить поле со списком с элементами. После того, как элемент был выбран и представлен нажатием кнопки, я хочу, чтобы он удалял элемент из поля со списком. Моя попытка состояла в том, чтобы сначала удалить выбранный элемент из массива String, удалить все элементы из поля со списком и повторно заполнить его массивом String.Как удалить определенный элемент из поля со списком в Java?

выбор является массив String, cboChoice является выпадающий, strChoice является пункт получения удален

for(int i = 0; i < choice.length; i++) { 
     if(choice[i].equals(strChoice)) { 
      choice[i] = null; 
      cboChoice.removeAllItems(); 
      cboChoice.addItem(choice); 
     } 
    } 

Это, насколько я получил, я не знаю, если есть более простой способ делая это, но я не могу заставить его работать.

ответ

0

Поскольку у вас есть массив String и JComboBox, которые имеют одинаковые элементы в том же порядке, вы можете использовать JComboBox.getSelectedIndex() для извлечения местоположения индекса выбранного элемента и удаления из JComboBox и вашего массива.

Как предложение, я бы сделал массив String ArrayList, это «умный» динамический массив и может оставаться лучше синхронизированным с вашим JComboBox. Также сначала убедитесь, что вы удаляете из своего массива, прежде чем удалять из своего JComboBox, иначе выбранный индекс может измениться.

ArrayList объявление будет выглядеть следующим образом:

ArrayList<String> choice = new ArrayList<>(); 

Добавить содержимое в этот список, как так:

choice.add(yourChoice); 

Удаление элементов будет как следует:

if (cboChoice.getSelectedIndex() > -1) { 
     choice.remove(cboChoice.getSelectedIndex()); 
     cboChoice.getSelectedIndex(); 
} 

Надеюсь, это поможет ... Кроме того, как только вы поймете, как это работает, я бы предложил изучить ComboBoxModel. У некоторых элементов управления поворота есть объекты модели, которые вы можете использовать для добавления/удаления/изменения содержимого без необходимости ссылаться на фактический элемент управления.

+0

Это было действительно полезно, спасибо :) –

0

Если флажок jComboBox Javadoc вы увидите

RemoveItem (Object anObject) Удаляет элемент из списка.

Просто позвоните, чтобы удалить объект, который больше не нужен.

Код, который вы предложили, будет работать (хотя я не уверен, что jComboBox будет делать с нулевыми значениями), но не особенно эффективен.

+0

Спасибо, теперь я добавил это, но когда я запустил и удалил элемент, он не обновляет выпадающие списки в графическом интерфейсе? –

+0

Возможно, вам нужно будет убедиться, что вы передаете точный строковый объект (т. Е. Выполните цикл и когда вы найдете 'choice [i]' do 'removeItem (choice [i])'). Для эффективности выполните «break», хотя вы не просматриваете остальную часть списка. –

+0

strChoice - это объект, который я удаляю так cboChoice.removeItem (strChoice); должно сработать? –

0

Этот код работает, но есть еще одна проблема; вы не можете удалить последний элемент в списке. Чтобы решить эту проблему, вы можете добавить элемент в список, который вы просто игнорируете на этапе удаления. Я использовал «» в начале списка в прошлом.

Также я хотел бы указать, что большинство примеров JComboBox показывают, используя строки, но вы можете поместить любой тип объекта, который вы хотите в поле. Элемент в поле отобразит Object.toString(). Во многих случаях более полезно и прямо, чтобы вернуть экземпляр, который вы хотите, чем искать его в списке на основе информации, взятой из ComboBox.

import javax.swing.*; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

/** 
* Created by bday on 4/22/15.<br> 
* <br> 
* ItemRemovingComboBox will do something useful I'm sure 
*/ 
public class ItemRemovingComboBox { 
    private final JFrame frame = new JFrame(); 
    private final List<String> strings = new ArrayList<String>(); 
    private final JComboBox cb; 
    private final ItemListener itemListener; 

    public ItemRemovingComboBox() 
    { 
     String[] testItems = new String[] {"one", "two", "three"}; 
     strings.addAll(Arrays.asList(testItems)); 
     cb = new JComboBox(testItems); 
     frame.add(cb); 
     frame.setSize(200, 200); 
     frame.setVisible(true); 

     itemListener = new ItemListener() { 
      public void itemStateChanged(ItemEvent itemEvent) { 
       if (itemEvent.getStateChange() == ItemEvent.SELECTED) { 
        String item = (String) itemEvent.getItem(); 
        System.out.println("Item: " + item + " removed from list"); 
        removeItem(item); 
       } 
      } 
     }; 
     cb.addItemListener(itemListener); 
    } 

    private void removeItem(String item) { 
     //this step is required to keep from calling back to the listener with new selection when item is removed 
     cb.removeItemListener(itemListener); 
     strings.remove(item); 
     cb.removeItem(item); 
     cb.addItemListener(itemListener); //okay now we what to know about changes again 
    } 

    public static void main(String[] args) { 
     new ItemRemovingComboBox(); 
    } 
} 
Смежные вопросы