Eclipse WindowBuilder/Jframe - Обновить текст меток

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

вот основной автоматически сгенерированный код построителя окон, который я немного отредактировал и добавил

    package WindowBuilder;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;

import Logic.ButtonPresses;
import javax.swing.JTextField;
import javax.swing.JLabel;

public class WindowBuilder {
    public JLabel Title;
    private JFrame frame;

    /**
     * Launch the application.
     */
    public void Launch() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    WindowBuilder window = new WindowBuilder();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public WindowBuilder() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    public void Refresh(){
        frame.revalidate();
        frame.repaint();
    }
    public void ChangeTitle(){
        Title.setText("Test");
    }
    public void initialize() {
        frame = new JFrame();
        frame.setResizable(false);
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton btnNext = new JButton("Next");
        btnNext.setBounds(365, 226, 79, 45);
        btnNext.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                ButtonPresses.Next();
            }
        });
        frame.getContentPane().setLayout(null);
        frame.getContentPane().add(btnNext);

        JButton btnBack = new JButton("Back");
        btnBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ButtonPresses.Back();
            }
        });
        btnBack.setBounds(0, 226, 79, 45);
        frame.getContentPane().add(btnBack);

        Title = new JLabel("Program Name");
        Title.setBounds(9, 11, 89, 33);
        frame.getContentPane().add(Title);

        JButton btnInstall = new JButton("Install/Run");
        btnInstall.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        btnInstall.setBounds(173, 226, 116, 45);
        frame.getContentPane().add(btnInstall);
    }

}

здесь я вызываю функции.

    package Main;

import Logic.ProgramAdder;
import Logic.Programs;
import WindowBuilder.WindowBuilder;

public class Main {

    public static void main(String[] args) {
        Main start = new Main();
        start.Start();
    }
    public void Start(){
        WindowBuilder wb = new WindowBuilder();
        wb.Launch();
        ProgramAdder.ProgramList();
        DisplayPrograms();
        wb.ChangeTitle();
        wb.Refresh();
    }
    public static void DisplayPrograms(){
        for (Programs p : ProgramAdder.programs) {
               System.out.print(p.ProgramName);
               System.out.println(p.ProgramPath);
        } 
    }

}

person G.Bushnell    schedule 26.11.2015    source источник
comment
Имена переменных НЕ должны начинаться с заглавной буквы. Имена методов НЕ ДОЛЖНЫ начинаться с заглавной буквы. Соблюдайте соглашения Java. Не используйте нулевой макет и setBounds(,,,). Swing был разработан для использования с менеджерами макетов.   -  person camickr    schedule 26.11.2015
comment
Код был сгенерирован автоматически конструктором окон. Поэтому я не уверен, как я могу изменить это, не испортив его. и мне всегда нравилось использовать заглавные буквы в каждом слове, это просто мое личное предпочтение.   -  person G.Bushnell    schedule 26.11.2015
comment
Проблема в том, что вы размещаете код на форуме с просьбой о помощи. Ваши соглашения об именах вызывают проблемы с подсветкой форума, что затрудняет нам чтение вашего кода. Либо избавьтесь от IDE (лучше написать графический интерфейс самостоятельно), либо узнайте, как настроить IDE в соответствии с соглашениями Java.   -  person camickr    schedule 26.11.2015
comment
ааа, хорошо, извините, я не знал, что на веб-сайте возникнут трудности, имейте это в виду в следующий раз, когда я буду публиковать сообщения. По коду графического интерфейса пользователя это означает, что я не использую интерфейс построителя окон, а вместо этого напрямую кодирую кнопки и т. Д.? Я новичок в кодировании графического интерфейса в Java, я привык к Visual Basic.   -  person G.Bushnell    schedule 27.11.2015
comment
Начните с рабочего демо-кода из учебника Swing. Например, Как использовать ярлыки. Код там покажет вам, как структурировать класс, и код не зависит от кода, сгенерированного из IDE, что означает, что ваш код будет переносимым при переходе от IDE к IDE. Просто используйте IDE для форматирования кода, отладки и так далее.   -  person camickr    schedule 27.11.2015
comment
Спасибо, мне, вероятно, следовало провести больше начальных исследований графического интерфейса Java, я только что скачал первое, что нашел. извините, если я показался грубым в моем первом комментарии. я прочитаю и начну с самого начала, и, надеюсь, это решит проблемы, которые у меня есть   -  person G.Bushnell    schedule 27.11.2015


Ответы (1)


Недавно я разработал простой графический интерфейс в Swing для запуска из него скриптов Python. Была такая же проблема (в JFrame метка должна была сообщать пользователю, когда выполняется скрипт python), попробуйте:

Чтобы показать ярлык:

    Label.setVisible(true);
    Label.paintImmediately(x, y, width, height);

Чтобы скрыть ярлык:

    Label.setVisible(false);

ОБНОВЛЕНИЕ:

Измените текст, используя это, пока метка невидима.

    Label.setText(String text);
person Mayuso    schedule 26.11.2015
comment
Привет, спасибо за ответ, я на самом деле покидаю магазин на сегодня, но я попробую завтра - person G.Bushnell; 26.11.2015
comment
Привет, у меня есть возможность проверить это только сейчас, и текст по-прежнему не меняется. может ли это иметь какое-то отношение к тому, что я вызываю его из отдельного класса? - person G.Bushnell; 27.11.2015
comment
Текста это, конечно, не меняет. Это делается для того, чтобы сделать метку видимой или невидимой. (Вы можете изменить текст с помощью Label.setText(String text); Когда метка не видна. - person Mayuso; 30.11.2015
comment
Таким образом, вы можете изменить текст только тогда, когда метка не видна? - person G.Bushnell; 30.11.2015
comment
Я не могу подтвердить это прямо сейчас, но наверняка это самый простой способ, просто сделать его невидимым, изменить его и снова сделать видимым. Таким образом, вы избежите возможных ошибок выравнивания (или любых других) - person Mayuso; 30.11.2015