Изменение параметров в пределах (нескольких) Jlabels - PullRequest
1 голос
/ 01 февраля 2011

У меня есть Swing GUI с 50 или около того Jlabels:

{
    jLabel1 = new JLabel();
    getContentPane().add(jLabel1, "0, 0");
    jLabel1.setText("AAPL 1453.54 2334.34 3234.32");
    jLabel1.setForeground(new java.awt.Color(0,249,0));
}

Я хочу иметь возможность изменять txt и цвет без необходимости писать большой набор условных операторов.Какой лучший способ сделать это?

Я думал написать метод overWrite (String text, int hPos, int vPos) {}, чтобы просто добавить новую метку на месте.

Может быть, есть гораздо лучший способ сделать это, я пытаюсь сделать показ сырой акции, который меняет цены на акции и цвет в зависимости от увеличения или уменьшения.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Окей, решение ниже ужасно, поэтому я только что нашел другое решение ... Вы можете установить имя каждого из ваших ярлыков, чтобы вы могли получить конкретный ярлык.И вам не нужна какая-либо другая структура для хранения информации.

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);
}

Вывод:

enter image description here

1 голос
/ 01 февраля 2011

Храните ваши JLabels на карте.Возможно, введите их на биржевом символе, например:

Map<String, JLabel> labelMap = new HashMap<String, JLabel>;
labelMap.put("AAPL", jLabel1);

Когда вам нужно обновить этикетку, найдите ее, используя ее ключ, и измените ее цвет:

JLabel label = labelMap.get("AAPL");
label.setForeground(Color.RED);

Также подумайтеоб использовании JTable.Большинство биржевых тикеров, которые я видел, реализованы с использованием одного.

...