Как получить значения динамически генерируемых компонентов? - PullRequest
2 голосов
/ 15 февраля 2012

Я динамически генерирую список полей имен, ползунков и меток и пытаюсь выяснить, как получить доступ к значениям ползунков и изменить метки. Другие посты предлагают использовать массив, но я не знаю, с чего начать.

Мой код таков:

public Tailoring(int n) {
    /*initComponents();*/
    JPanel containerPanel = new JPanel();
    containerPanel.setLayout(new BoxLayout(containerPanel, BoxLayout.PAGE_AXIS));
    this.add(containerPanel);
    JLabel Title = new JLabel("Tailoring:");
    containerPanel.add(Title);
    for(int i = 0; i < n; i++){
        JPanel rowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JTextField NameBox = new JTextField("Guest " + (i+1));
        JSlider TipSlider = new JSlider();
        JLabel TipCost = new JLabel();
        rowPanel.add(NameBox);
        rowPanel.add(TipSlider);
        rowPanel.add(TipCost);
        containerPanel.add(rowPanel);
    }
}

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Вы можете создать новый класс YourPanel, который расширяет JPanel. Вместо утверждения

JPanel rowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

Вы можете использовать

YourPanel rowPanel = new YourPanel(new FlowLayout(FlowLayout.LEFT));

Определите текстовое поле, ползунок и метку как свойства этого YourPanel класса. Укажите getter / setters для каждого поля. Затем используйте массив или ArrayList объектов YourPanel в вашем приложении. Вы сможете дозвониться до метки n th с помощью вызова:

panels.get(n).getJLabel();
0 голосов
/ 15 февраля 2012

Похоже, что вы хотите изменить значение, отображаемое в JLabel при изменении связанного JSlider, вправо ? Лучший способ связать пары объектов в Java - это структура Map :

Map<Component, JSlider> sliderToLabel = new HashMap<Component, JSlider>();

for (int i = 0; i < n; i++) {

    // after your loop code

    sliderToLabel.put(TipSlider, TipCost); // map the slider to its label
}

Вы сможете получить ссылку на JSlider в коде, который прослушивает изменения в этом компоненте.

JLabel updateLabel = sliderToLabel.get(targetedSlider);
updateLabel.setText("updated text");

Примечания

  • Как правило, имена переменных должны начинаться со строчных букв
  • Прослушиватель событий, на который я ссылался, также должен быть присоединен к циклу. См. Запись прослушивателей событий Oracle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...