Окей, решение ниже ужасно, поэтому я только что нашел другое решение ... Вы можете установить имя каждого из ваших ярлыков, чтобы вы могли получить конкретный ярлык.И вам не нужна какая-либо другая структура для хранения информации.
JLabel label = new JLabel();
label.setName("the_name");
Затем вы можете выполнить итерацию (как и другое решение) по компонентам и получить конкретную такую, как эта:
for (Component c : frame.getContentPane().getComponents()) {
if (c.getName().equals("the_name")) {
// do the modifications...
}
}
Старое решение: Это уродливо, но работает .. :)
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame("Test");
frame.setLayout(new GridLayout(0, 1));
frame.add(new JButton("Hello"));
frame.add(new JLabel("World", JLabel.CENTER));
frame.add(new JButton("Hello"));
frame.add(new JLabel("World", JLabel.CENTER));
for (Component c : frame.getContentPane().getComponents()) {
if (c instanceof JLabel) {
((JLabel) c).setText("Friend");
c.setForeground(Color.RED);
}
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}
Вывод: