我有这个简单的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
位置中的所有可用空间。
我错了什么?如何创建具有特定尺寸的按钮?
答案 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);