Java jframe set运行时可见

时间:2019-03-20 15:06:28

标签: java jframe jlabel gridbaglayout

大家好,我有一个主类来初始化一个JLabel可见性设置为false的gridbag布局对象。

我想将JLabel设置为在程序运行时可见,我已经尝试过了,但是不起作用。它将仅显示默认布局。

主类:

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

Gridbag布局类:

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 :(得分:0)

您想在程序运行时显示标签,对吗?这与布局管理器无关。 我举一个例子,只要显示对话框(代表您的任务/程序),标签就可见。我希望您可以根据需要采用它。可能您必须将程序/任务放在自己的线程中。

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

}