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