可见性更改时,JButton大小设置为默认大小

时间:2015-05-01 07:00:51

标签: java swing jbutton actionlistener visibility

就像我说的,当我点击JButton GR时,JButton MN被设置为默认大小(窗口大小)。 当程序启动时,JButton GR的大小正确(200乘20),单击时菜单按钮也会以正确的大小显示(200乘20),但单击菜单按钮时{{1} }是默认大小。单击完整尺寸GR JButton后,“菜单”按钮将以正确的尺寸重新显示。 我正在使用BlueJ(学校不允许使用其他IDE)。

GR JButton

1 个答案:

答案 0 :(得分:2)

  

就像你说Jbutton GR是......

  • JFrame将BorderLayout作为API中的默认LayoutManager,

  • 使用Java命名约定

  • 使用LayoutManager而不是NullLayout和错误的方式

  • 调用setVisible(真);应该是最后一行代码行,因为您有可能将所有JComponents添加到已经可见的容器中(例如鼠标重新绘制那些JComponents)

  • 使用Initial Thread

  • 尽可能最简单

enter image description here

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

public class Main {

    private JFrame myProgram1 = new JFrame("myProgram1");
    private JButton myMN = new JButton("MENU");
    private JButton myGR = new JButton("myGRC");

    public Main() {
        myGR.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent myGRH) {
                myMN.setVisible(true);
                myGR.setVisible(false);
            }
        });
        myProgram1.add(myMN, BorderLayout.SOUTH);
        myMN.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent myMNH) {
                myMN.setVisible(false);
                myGR.setVisible(true);
            }
        });
        myProgram1.add(myGR, BorderLayout.NORTH);
        myProgram1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myProgram1.pack();
        myProgram1.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Main();
            }
        });
    }
}