[英]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.