Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何防止JButton改变大小?_Java_Swing_Jframe_Jbutton - Fatal编程技术网

Java 如何防止JButton改变大小?

Java 如何防止JButton改变大小?,java,swing,jframe,jbutton,Java,Swing,Jframe,Jbutton,我当时正在玩JFramewindows(因为我是Java新手),我发现当我手动最大化JFrame时,我的JButton改变了大小。当我没有最大化屏幕时,它仍然是我设置的大小 我能得到任何帮助吗 这是我的密码: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Frames { publ

我当时正在玩
JFrame
windows(因为我是Java新手),我发现当我手动最大化
JFrame
时,我的
JButton
改变了大小。当我没有最大化屏幕时,它仍然是我设置的大小

我能得到任何帮助吗

这是我的密码:

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

public class Frames {
    public static void main(String[] args) {
        Image icon = Toolkit.getDefaultToolkit().getImage("C:\\Users\\admin\\Documents\\Test Stuff\\icon.png");
        JFrame frame = new JFrame("Frame");
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLayout(new FlowLayout());
        frame.setSize(856, 482);
        frame.setLocation(384, 216);
        frame.getContentPane().setBackground( Color.cyan );
        frame.setIconImage(icon);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JButton buttonClose = new JButton("Close");
        buttonClose.setSize(100, 50);
        buttonClose.setLocation(378, 10);
        buttonClose.addActionListener(e -> {
            frame.dispose();
        });
        buttonClose.setVisible(true);
        buttonClose.setBackground(Color.green);
        frame.add(buttonClose);
    }
}
照Jarlik说的做:
buttonClose.setPreferedSize(新维度(100,50))
而不是setSize()。并移动
frame.setVisible(true)到底部。

不要使用setSize()或setBounds()或setPreferredSize()

Swing设计用于布局管理器

您正在使用FlowLayout。FlowLayout将考虑按钮的大小

代码的问题是,在框架可见后将按钮添加到框架中,因此最初不会调用布局管理器,并且按钮会以您为其设置的随机大小显示。当您最大化框架时,将调用布局管理器,以便按钮以其首选大小显示

在使框架可见之前,应将回转组件添加到框架中。因此,逻辑的基本顺序应该是:

frame.add( button );
frame.setVisible( true );
按钮将以适当的大小显示

如果要在按钮文本周围留出“额外”空间,请使用按钮的属性来控制:

JButton button = new JButton(...);
button.setMargin( new Insets(20, 20, 20, 20) );

尝试
按钮关闭.setPreferedSize(新维度(100,50))(1-)不要使用setPreferredSize()硬编码按钮的大小。有一些Swing属性允许您自定义大小。