【发布时间】:2022-01-23 17:15:00
【问题描述】:
我使用 IntelliJ IDEA 的表单设计器制作了一个 GUI,并在 JScrollPane 中添加了一个 JList。问题是,无论何时或如何将元素添加到 JList,它都不会显示它们。我使用了调试工具,可以看到元素在 JList 中,只是没有渲染。
我目前正在使用 DefaultListModel,但我尝试使用 Vector 和数组但没有成功。我还尝试在 JList、JScrollPane 和 JFrame 本身中使用函数 updateUI(),以及在 JList 中使用列表的最后一个索引的函数 ensureIndexIsVisible(),但没有。
这个表单是从另一个表单调用的,我认为不需要主表单的代码,所以我只将错误表单的代码粘贴到这里:
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,我在那里添加的数据会显示出来,但是一旦加载它就不会改变。
【问题讨论】:
-
enviar从来没有赋值,所以它是空的。 -
如果我尝试 make
enviar = new JPanel();现在窗口什么也没有显示,那就更糟了
标签: java swing intellij-idea jlist