簡體   English   中英

Java JList 未顯示其元素

[英]Java JList not showing its elements

我使用 IntelliJ IDEA 的表單設計器制作了一個 GUI,並在 JScrollPane 中添加了一個 JList。 問題是,無論何時或如何將元素添加到 JList,它都不會顯示它們。 我使用了調試工具,可以看到元素在 JList 中,只是沒有渲染。

我目前正在使用 DefaultListModel,但我嘗試使用 Vector 和 arrays 沒有成功。 我還嘗試在 JList、JScrollPane 和 JFrame 本身中使用 function updateUI(),以及 function 中的最后一個索引,但沒有任何索引。

這個表單是從另一個表單調用的,我認為不需要主表單的代碼,所以我只將錯誤表單的代碼粘貼到這里:

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Enviar extends JFrame {
    private JTextField codigoTxt;
    private JButton anadirBtn;
    private JPanel enviar;
    private JLabel errorCodigoLbl;
    private JList<String> companerosLBox;
    private DefaultListModel<String> listaCompas = new DefaultListModel<>();
    private JButton eliminarSelecBtn;
    private JButton eliminarTodoBtn;
    private JTextField xPosTxt;
    private JTextField yPosTxt;
    private JLabel errorClickLbl;
    private JButton clickBtn;
    private JButton atrasBtn;
    private JScrollPane scrollPane;

    public Enviar() {
        setContentPane(enviar);
        setTitle("Remote Clicker - Enviar click");
        setResizable(false);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
        errorCodigoLbl.setVisible(false);
        errorClickLbl.setVisible(false);
        setVisible(true);
        listaCompas.addElement("sdd");
        listaCompas.addElement("sd2d");
        listaCompas.addElement("sdd3");
        companerosLBox = new JList<>(listaCompas);
        scrollPane = new JScrollPane(companerosLBox);
        anadirBtn.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                anadirCompa(codigoTxt.getText());
            }
        });
        codigoTxt.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    anadirCompa(codigoTxt.getText());
                }
            }
        });
    }

    private void anadirCompa(String codigo) {
        if (valido(codigo)) {
            codigoTxt.setText("");
            errorCodigoLbl.setVisible(false);
            listaCompas.addElement(codigo);
            companerosLBox.setModel(listaCompas);
        } else {
            errorCodigoLbl.setVisible(true);
        }
    }

    private boolean valido(String codigo) {
        boolean res = true;
        int i = 0;
        while (res && i < codigo.length())
        {
            res = codigo.charAt(i) >= '0' && codigo.charAt(i) <= '9' || codigo.charAt(i) == '-';
            i++;
        }
        return res && codigo.indexOf('-') > 0 && codigo.indexOf('-') < codigo.length()-1;
    }
}

我還能做什么或我做錯了什么?

編輯:我還要補充一點,如果我通過表單構建器本身填充 JList,則會顯示我在那里添加的數據,但是一旦加載它就不會改變。

您應該只在構造函數中調用一次 jList.setModel()。 每次向列表中添加內容時,您都會調用它。

嘗試這個:

public class Enviar extends JFrame {
    //...
    private JList<String> companerosLBox = new JList<>();
    private DefaultListModel<String> listaCompas = new DefaultListModel<>();

    public Enviar() {
        //...
        listaCompas.addElement("sdd");
        listaCompas.addElement("sd2d");
        listaCompas.addElement("sdd3");
        companerosLBox.setModel(listaCompas);
    }

    private void anadirCompa(String codigo) {
        if (valido(codigo)) {
            codigoTxt.setText("");
            errorCodigoLbl.setVisible(false);
            listaCompas.addElement(codigo);
        } else {
            errorCodigoLbl.setVisible(true);
        }
    }

}

好的,問題是 IntelliJ IDEA 的表單設計器與普通的 Java 的工作方式不同。

問題是在這種情況下不需要創建一個新的 JList,所以當我做companerosLBox = new JList<>(listaCompas); 我將它從表單中解綁(我想)。

因此,要使提供的代碼正常工作,只需要替換

companerosLBox = new JList<>(listaCompas);

companerosLBox.setModel(listaCompas);

在構造函數中(為了更正,從anadirCompa()中刪除同一行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM