我试图在程序中创建一个函数,该函数将读取一个字符串,然后将页面上的每个jlabel设置为该字符串。我知道.setText();但我打算一次对100个标签进行处理。使用下面的代码,我打算使用for循环并多次调用该方法,直到有标签并在函数内发送标签名称为止。即
======= Joined =======
Constructor value is 99
Actual value is 99
The value is 99
=== JoinedDerivedA ===
Constructor value is 99
Actual value is 0 // <-- unexpected behaviour
The value is 0
=== JoinedDerivedB ===
Constructor value is 99
Actual value is 99
The value is 99
但是为了最初测试代码,我只是硬编码了一个标签的名称并运行了它。第一次工作,但现在每次都得到一个空指针异常。请有人帮忙。下面的实际代码:
button.pressed() {
updateLabel(labelName);
}
public void updateLabel(String name) {
…
}
答案 0 :(得分:1)
默认情况下,Component.name
是null
,因此,要仅选择标签,应使用instance of
:
private void updateLabels(String str) {
for (Component component : getContentPane().getComponents())
if (component instanceof JLabel)
((JLabel)component).setText(str);
}
我认为通常情况下,面板上有很多组件和一些标签。因此
使用for (Component component : getComponents()) {}
并不是最佳解决方案。
如果要为所有标签设置相同的文本,则最好创建一个List<JLabel>
并包含所有应更新的标签,然后使用它来设置文本:
private final List<JLabel> labels = new ArrayList<>();
private void init() {
add(createLabel());
}
// hide add to labels within create method
private JLabel createLabel() {
JLabel label = new JLabel():
labels.add(label);
return label;
}
如果要为标签设置不同的文本,则最好为标签设置正确的名称,并对所有标签使用Map<String, JLabel>
:
private final Map<String, JLabel> labels = new HashMap<>();
private final static String NAME_ACCOUNT = "account";
private final static String NAME_SCORE = "score";
private void int() {
add(createLabel(NAME_ACCOUNT));
add(createLabel(NAME_SCORE);
}
// hide add to labels within create method
private JLabel createLabel(String name) {
JLabel label = new JLabel():
label.setName(name);
labels.put(name, label);
return label;
}
答案 1 :(得分:0)
这是一个潜在的问题:
if (c.getName().equals("Jlabel")) {
由于大多数Swing组件都没有设置name属性,除非编码员明确地设置了 ,并且我想知道这是否是NullPointerException的来源。
最好做:
if (c instanceof JLabel) {
// ....
}
所以是的,您可以递归地遍历GUI上所有容器中包含的所有组件,检查每个instanceof JLabel
是否为List<JLabel> labels = new ArrayList<>();
,然后进行转换和设置,但是……不,这并不干净,不好。
为什么不简单地将JLabels放入诸如
的集合中JList<String>
,然后使用for循环,遍历列表并更改标签的状态。
....还是不知道您是否要使用其他组件来显示您的字符串,例如export let routes: Routes = [
{
path: '',
component: exampleComponent,
children: [
{
path: '',
component: SettingsComponent
}
}
]
?