Java jframe setVisible во время работы - PullRequest
0 голосов
/ 20 марта 2019

Привет всем, у меня есть основной класс, который создает объект компоновки gridbag с JLabel visbilty, установленным в false.

Я бы хотел, чтобы JLabel отображался при запуске программ, я пробовал это, но это не сработает. Это просто отобразит макет по умолчанию.

Основной класс:

gui = new gui();
gui.display();
gui.label.setVisible(true); 

Класс раскладки сетки:

public JFrame frame;
public JLabel label1; 


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


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

}

/**
 * Initialize the contents of the frame.
 */
@SuppressWarnings("static-access")
public void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 600, 1000);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GridBagLayout gridBagLayout = new GridBagLayout();
    frame.getContentPane().setLayout(gridBagLayout);

}

label1 = new JLabel(new ImageIcon("hi"));
GridBagConstraints gbc_label1 = new GridBagConstraints();
gbc_label1.insets = new Insets(0, 0, 5, 5);
gbc_label1.gridx = 1;
gbc_label1.gridy = 1;
label1.setVisible(false); 
frame.getContentPane().add(label1, gbc_label1);

1 Ответ

0 голосов
/ 20 марта 2019

Вы хотите отображать метку во время работы программы, верно? Это не имеет ничего общего с менеджером макета. Я привожу вам пример, где метка видна, пока отображается диалог (представляющий вашу задачу / программу); и я надеюсь, что вы можете принять его для своих нужд. Возможно, вы должны поместить программу / задачу в собственный поток.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Y extends JFrame {
  public static final long serialVersionUID = 100L;

  public Y() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300, 240);

    JLabel lb= new JLabel("Programme is running ...");
    lb.setVisible(false);
    add(lb, BorderLayout.CENTER);
    JButton b= new JButton("Launch programme (dialog)");
    b.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        lb.setVisible(true);
        JDialog dlg= new JDialog(Y.this, "The dialog", true);
        dlg.setSize(100, 100);
        dlg.setVisible(true);
        lb.setVisible(false);
      }
    });
    add(b, BorderLayout.SOUTH);
    setVisible(true);
  }


  static public void main(String args[]) {
    EventQueue.invokeLater(Y::new);
  }

}
...