gpt4 book ai didi

java - 在 'for' 循环中设置 JLabel 的文本

转载 作者:行者123 更新时间:2023-12-02 04:41:15 25 4
gpt4 key购买 nike

我确实在从 for 循环设置 JLabel 文本时遇到问题。 loopMessage() 方法只是设置列表的第一个索引,但是当我打印出来时,我可以看到所有索引:

meep spring
meep2 winter

我想要标签也设置窗口上的整个列表

public class ControllerMessage {
private ModelMessage mm;
private ViewMessage vm;

public ControllerMessage(ModelMessage mm, ViewMessage vm) {
this.mm = mm;
this.vm = vm;
loopMessage();
addMessage();
loopMessage();
}

public void loopMessage() {
for (Message s : mm.getAllMessages()) {
System.out.println(s.getName() + " " + s.getDate());
vm.setLabel(s.getName() + " " + s.getDate());
}
}

public Message addMessage() {
return this.mm.addMessage(new Message(2, "meep2", "winter"));
}
}

View 类:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ViewMessage extends JFrame{

private JLabel additionLabel = new JLabel();

public ViewMessage() {

JPanel calcPanel = new JPanel();

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 600);


calcPanel.add(additionLabel);

this.add(calcPanel);
}

public void setLabel(String m){
additionLabel.setText(m);
}
}

最佳答案

JLabel 只能保存字符串,通常是单行文本。如果您想循环显示文本,但显示一段定义的时间,然后显示下一个文本,请使用 Swing Timer。这将使您不必显式创建一个后台线程,要求您注意将后台线程中的所有 Swing 代码调用排队到事件线程上,因为保证在 Swing 事件线程上调用 Timer 的 ActionListener 代码。/p>

如果要显示多行文本,请使用 JTextArea 或 JList。我的猜测是您确实想使用 JList。

例如,

// better to extend JPanel than JFrame, since this makes your code more flexible.
public class ViewMessage extends JPanel {
private static final int LIST_WIDTH = 40;
private static final int VISIBLE_ROWS = 20;
private DefaultListModel<String> listModel = new DefaultListModel<>();
private JList<String> messageList = new JList<>(listModel);
private JLabel additionLabel = new JLabel();

public ViewMessage() {
// set the width of the JList
String listWidth = String.valueOf(LIST_WIDTH);
String prototypeValue = String.format("%" + listWidth + "s", " ");
messageList.setPrototypeCellValue(prototypeValue);

// set the number of JList rows visible in the scrollpane
messageList.setVisibleRowCount(VISIBLE_ROWS);

setLayout(new BorderLayout());
add(new JScrollPane(messageList));
}

public void appendMessage(String message) {
listModel.addElement(message);
}

}

关于java - 在 'for' 循环中设置 JLabel 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com