JButton没有使用setMaximumSize()调整大小?

时间:2016-02-12 15:20:55

标签: java swing button

我一直在努力学习按钮,但它拒绝调整大小。 Button1(下面的代码)只占用整个屏幕。我看到其他帖子的问题是他们没有使用

setMaximumSize();

但是我正在使用它仍然无效!我还没有制作JPanel。这是我的JFrame:

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame {
private JButton button1;
private JButton button2;

public Frame()
{
    button1 = new JButton("Hello button1");
    button2 = new JButton("Hello button2");
    button2.setMaximumSize(new Dimension(100,100));
    button1.setMaximumSize(new Dimension(100,100));
    add(button2);
    add(button1);

}

}

我的主要课程简单明了:

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Panel extends JPanel{
public static void main(String args [])
 {
    Frame frame = new Frame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setVisible(true);
  }
 }

2 个答案:

答案 0 :(得分:4)

这是因为默认情况下,框架(contentPane)有一个BorderLayout。您将按钮添加到BorderLayout.CENTER,因此布局管理器会忽略minimum - ,preferred - 和maximumSize

  

我只是希望他们小而并肩地出现

为此,您可以使用简单的FlowLayout。 (如果您希望它们以框架为中心,则为JPanel的父GridBagLayout

如果您想要自定义宽度&按钮的高度覆盖其getPreferredSize方法。覆盖此方法比调用setPreferredSize更安全。

Example

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example {

    public Example() {

        JButton button1 = new JButton("Hello button1");
        JButton button2 = new JButton("Hello button2") {
            @Override
            public Dimension getPreferredSize() {
                int width = super.getPreferredSize().width;
                return new Dimension(width, width);
            }
        };;

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(button1);
        buttonPanel.add(button2);

        JPanel contentPanel = new JPanel(new GridBagLayout());
        contentPanel.add(buttonPanel);

        JFrame frame = new JFrame();
        frame.setContentPane(contentPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

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

}

答案 1 :(得分:1)

我添加了一个flowlayout并将setMaximumSize更改为setPreferredSize。这应该可以解决你的问题。 试试这个:

import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame {
private JButton button1;
private JButton button2;

public Frame()
{
    button1 = new JButton("Hello button1");
    button2 = new JButton("Hello button2");
    button2.setPreferredSize(new Dimension(100,100));
    button1.setPreferredSize(new Dimension(100,100));
    add(button2);
    add(button1);

    }

}

< ----现在是另一个班级--->

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Panel extends JPanel{
public static void main(String args [])
 {
    Frame frame = new Frame();
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setVisible(true);
  }
 }