Isu*_*uru 2 java user-interface swing jlabel
我试图通过使用该setText()
方法更新JLabel ,但我无法重绘JLabel.我必须使用这种repaint()
方法吗?
这是代码的一部分,我没有得到任何错误,但它没有更新JLabel.
public void actionPerformed(ActionEvent e) {
fc = new JFileChooser();
if(e.getSource() == addButton) {
int returnVal = fc.showOpenDialog(Main.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
filesList = fc.getSelectedFiles();
setFilesList(filesList);
StringBuilder logString = new StringBuilder();
logString.append("Files to Convert " + "\n");
for(int i = 0; i < getFiles().length; i++) {
logString.append(filesList[i].getAbsolutePath());
}
//JLabel log = new JLabel(); created above.
log.setText(logString.toString());
} else {
//log.append("Open command cancelled by user." + newline);
}
//log.setCaretPosition(log.getDocument().getLength());
}
}
Run Code Online (Sandbox Code Playgroud)
Hov*_*els 10
JLabel不需要重新调用.简单地调用setText(...)将改变标签的文本,这就是所需要的.
我想知道你的问题是否是一个并发问题,你是在Swing事件线程上进行长时间运行的进程,这是在阻止你的标签更新其文本.
如果是这样,那么考虑在后台线程中执行长时间运行的进程,例如SwingWorker提供的进程,然后在Swing线程上更新JLabel的文本,例如可以通过SwingWorker的发布/处理方法完成.
有关这方面的更多信息,请查看课程:Swing中的并发教程.
另外Mario De ...对于无法在JLabel上打印简单的新行是正确的.他的答案是1+.
我对 Java 中框架/组件的重绘如何工作有点困惑。你可以Paint(Graphics g)
,update(Graphics g)
根据 javadoc 只是调用paint(g)
。最后还有repaint()
...
如果这些似乎都不起作用,那么仅在您当前尝试设置文本的行创建标签不是更容易吗?
编辑:还可以选择使用不可编辑的文本区域。它不仅可以显示标准的换行符,而且可以将其放在 jScrollPane 中,当日志中有大量文件时这很方便,并且不需要重新绘制文本组件来显示更新的文本。奖金在我看来是巨大的...
归档时间: |
|
查看次数: |
34429 次 |
最近记录: |