如何在Java Swing中设置Button对象的特定维度?

时间:2013-09-24 10:23:44

标签: java swing jbutton layout-manager border-layout

我有这个简单的Java Swing测试应用程序,它显示一个上标签,在这个标签下面有一个按钮:

package com.techub.exeute;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

import org.jdesktop.application.SingleFrameApplication;

public class Main extends SingleFrameApplication{
    public static void main(String[] args) {
        Main a = new Main();
        a.startup();
    }

    @Override
    protected void startup() {
        JFrame frame = new JFrame("FrameDemo");
        frame.setMinimumSize(new Dimension(800, 400));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       

        JLabel myLabel = new JLabel("Hello World !!!", SwingConstants.CENTER);
        myLabel.setFont(new Font("Serif", Font.BOLD, 22));
        myLabel.setBackground(Color.RED);
        myLabel.setOpaque(true);
        myLabel.setPreferredSize(new Dimension(100, 80));

        frame.getContentPane().add(myLabel, BorderLayout.NORTH);

        Button myButton = new Button("Click Me !!!");
        myButton.setMaximumSize(new Dimension(50, 25));
        frame.getContentPane().add(myButton, BorderLayout.CENTER);

        //Display the window.
        frame.pack();
        frame.setVisible(true); 
    }
}

该按钮位于BorderLayout.CENTER位置。问题是,如果我使用Dimension对象设置了Maximum Size属性,则此按钮占用CENTER位置中的所有可用空间。

我错了什么?如何创建具有特定尺寸的按钮?

4 个答案:

答案 0 :(得分:1)

您目前正在告诉Java将按钮放在BorderLayout的中心。然后,Java认为您希望整个区域都填充此按钮。如果您想在BorderLayout的中心放置一个正常大小的按钮,请将该按钮添加到新的JPanel,然后将JPanel放在BorderLayout.CENTER内。

这样做,您告诉Java使用您的BorderLayout.CENTER填写JPanel。您放置在此JPanel中的元素将显示正常,因为这些元素因BorderLayout - JPanel而未被“拉伸”。

答案 1 :(得分:0)

您没有意识到不仅是决定结果的组件的最大/最小/首选大小。 LayoutManager在这方面有很多话要说,正如您所注意到的,BorderLayout将使用组件填充整个区域。

您可以做的是创建JPanel,例如FlowLayout,然后将JPanel放到BorderLayout.CENTER,将JButton放到JPanel {1}}。

答案 2 :(得分:0)

您正在使用BorderLayout,North区域有JLabel。 JButton位于中心位置。根据BorderLayout,JButton将占用剩下的所有空间。 请在链接上找到有关布局的更多信息:http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

答案 3 :(得分:0)

你正在使用BorderLayout,按钮占据了框架的所有左侧空间。 使用setBounds()函数。 myButton.setBounds(10,200,100,30);