Обновить JList после удаления элементов - PullRequest
0 голосов
/ 11 декабря 2018

У меня проблема с JList.Всякий раз, когда я удаляю из него элементы, список не обновляет его внешний вид, поэтому элементы остаются там и становятся недоступными для проверки.

Вот код:

DefaultListModel listModel = new DefaultListModel();

JList figureListBox = new JList(listModel);
figureListBox.setBounds(5, 20, 240, 300);
figureListBox.setBackground(Color.WHITE);
figureListBox.setBorder(BorderFactory.createLineBorder(Color.BLACK));
figureListBox.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
figureListBox.setLayoutOrientation(JList.VERTICAL);
figureListBox.setVisibleRowCount(10);

JButton deleteFigureButton = new JButton("Delete");
deleteFigureButton.setBounds(5, 305, 240, 25);
deleteFigureButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        if(currentFigure != -1) {
            listModel.remove(currentFigure);
            currentFigure = -1;
        }
    }
});`

Перерисовка и повторная проверка не работает, так кактакже updateUI ()

Вот скриншот того, как это выглядит

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Из вашего комментария:

список действительно обновляется после перемещения окна.

Убедитесь, что вы вызываете setVisible () после добавления компонентов в JPanel (при его использовании).).

Отметьте, если это относится к вашей проблеме. JPanel не обновляется до изменения размера Jframe

Также опубликуйте свой полный код.

0 голосов
/ 11 декабря 2018

Вот код NetBeans ->

// установить данные в jlist

 public void setList() {

    String[] listData = {"list1", "list2", "list3", "list3", "list3", "list3", "list3", "list3"};
    jList1.setListData(listData);

}

// удалить данные из jlist

public String[] delList() {

    ListModel<String> beforDeleteDataList = jList1.getModel();
    String[] newDataList = new String[beforDeleteDataList.getSize() - 1];  
    int beforDeleteDataListIndex = 1;
    try {
        for (int i = 0; i < (beforDeleteDataList.getSize()); i++) {

            newDataList[i] = 
            beforDeleteDataList.getElementAt(beforDeleteDataListIndex);
            beforDeleteDataListIndex++;
        }

    } catch (Exception e) {
         e.printStackTrace();
    }
return newDataList;}

// удалитьдействие кнопки

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    jList1.setListData(delList());

}  
...