Java Swing - установить текст Jlabel из другого метода

Я новичок в Java и Swing, и я использую Windowbuilder, чтобы поиграть с несколькими идеями графического интерфейса, которые у меня есть, но я столкнулся с проблемой при попытке установить текст Jlabel.

Windowbuilder автоматически создал экземпляр Jlabel с именем pathLabel в методе initialize() следующим образом:

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 570, 393);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JLabel pathLabel = new JLabel("New label");
    pathLabel.setBounds(61, 296, 414, 15);
    frame.getContentPane().add(pathLabel);}

Если я использую pathLabel.setText("введите текст здесь") из этого метода initialize(), то он работает нормально, но как я могу установить текст совершенно другим методом? Это не позволяет мне ссылаться на него.

У меня никогда не было этой проблемы в Visual Studio с C#, и я мог установить текст метки любым выбранным мной способом. Что мне не хватает?

Я надеюсь, что это имеет смысл, и я ценю любую помощь вообще. Спасибо.


person Bagshot    schedule 18.03.2012    source источник
comment
Еще одна причина не использовать генератор кода для создания кода Swing. Рассмотрите возможность изучения руководств по Swing, чтобы научиться кодировать это вручную.   -  person Hovercraft Full Of Eels    schedule 18.03.2012
comment
setBounds(..) Нет! Узнайте, как использовать макеты (с отступами) и границы!   -  person Andrew Thompson    schedule 18.03.2012
comment
У меня никогда не было этой проблемы в Visual Studio с C# Написание подобных вещей — не лучший способ побудить людей ответить. Разные языки имеют разные сильные и слабые стороны и способы использования. Java — это язык x-plat, который требует макетов для надежного определения размера и выравнивания компонентов. Использование макетов не так просто, как перетаскивание компонентов в известное/фиксированное место.   -  person Andrew Thompson    schedule 18.03.2012


Ответы (2)


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

class GUIClass extends JFrame{
 JLabel pathLabel;
 private void initialize() {
   frame = new JFrame();
   frame.setBounds(100, 100, 570, 393);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().setLayout(null);

   pathLabel = new JLabel("New label");
   pathLabel.setBounds(61, 296, 414, 15);
   frame.getContentPane().add(pathLabel);
}
void func(){
   pathLabel.setText("enter text here");
}
person mohit jain    schedule 18.03.2012

Вы можете создать поле для pathLabel в окружающем классе, чтобы все методы класса могли получить к нему доступ:

class YourClass {
    private JLabel pathLabel;
    private void initialize() {
        ...
        // Note that there is no declaration for pathLabel inside initialize
        //   since it was already declared above, and the above
        //   declaration is a reference shared by all class methods
        pathLabel = new JLabel("New label");
        ...}   
}
person Gabriel Gonzalez    schedule 18.03.2012