0

我有这个简单的 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位置。CENTER问题是,如果我使用 Dimension 对象设置了最大大小属性,则此按钮也会占用该位置的所有可用空间。

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

4

4 回答 4

1

您当前正在告诉 Java 将按钮放在BorderLayout. 然后 Java 认为您希望整个区域都充满这个按钮。如果您想将一个正常大小的BorderLayout按钮JPanel放在JPanel.BorderLayout.CENTER

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

于 2013-09-24T10:32:37.240 回答
0

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

于 2013-09-24T10:41:53.663 回答
0

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

于 2013-09-25T14:20:26.060 回答
0

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

你可以做的是创建一个JPanel,例如使用它,然后把FlowLayoutJPanel放到.BorderLayout.CENTERJButtonJPanel

于 2013-09-24T10:31:46.757 回答