Java Swing 按钮

phujayu 2014-06-30 09:58:18
本人是 Java 新手,遇到一些问题,求高手指点一下。
我创建的窗口里面添加了一个按钮,可是这个按钮没有按照我设定的尺寸显示出来,而是占满了整个客户区,变成了一个超大按钮,如下图:

Java 代码如下:

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

import javax.swing.*;

class MyDialog extends JDialog {

/**
*
*/
private static final long serialVersionUID = 3015530070082861574L;

Container container;
JLabel label;

public MyDialog(JFrame parent, String title) { // 构造函数
super(parent, title);
container = this.getContentPane();
label = new JLabel("This is a Dialog"); // 创建 Label
container.add(label); // 添加 Label
this.setBounds(240, 240, 200, 100); // 设置对话框位置,大小
this.setVisible(true); // 设置对话框可见
}
}

public class HelloJava implements ActionListener {

private JFrame window; // 主窗口
private Container container;
private JLabel label; // Label
private JButton button; // Button

public HelloJava(String title) { // 构造函数
window = new JFrame(title); // 创建窗口对象
label = new JLabel("This is a Swing window"); // 创建 Label 对象
button = new JButton("New Dialog"); // 创建 Button 对象

container = window.getContentPane();

label.setHorizontalAlignment(SwingConstants.CENTER); // 设置 Label 对齐方式

button.setBounds(0, 0, 75, 25); // 设置 button 大小,位置
button.addActionListener(this); // 设置 button 响应

container.add(label);
container.add(button);

container.setBackground(Color.white); // 设置窗口背景色

window.setVisible(true);
window.setBounds(120, 120, 800, 600);
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new HelloJava("Swing window");
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new MyDialog(window, "Swing Dialog");
}
}
...全文
193 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gloomyfish 2014-07-04
  • 打赏
  • 举报
回复
原因在于你使用了绝对定位来实现布局 所以你必须设置布局管理器为NULL 建议:除非特殊需要永远不应该使用绝对定位!
-江沐风- 2014-06-30
  • 打赏
  • 举报
回复
引用 2 楼 phujayu 的回复:
[quote=引用 1 楼 u012724379 的回复:] 在40行加上这句呢:
container.setLayout(null);
这是为什么,居然可以了~大哥不好意思了,我没分了,真的谢谢你。[/quote] 不要太在意分; javad的JFrame也好,panel也好,都有默认的布局管理器; 如果你不写的话,系统就会采用默认的布局管理器; 这是将布局管理器设置为null,这样原来的管理器就没用了,你写的控件就显示出来了;
phujayu 2014-06-30
  • 打赏
  • 举报
回复
引用 1 楼 u012724379 的回复:
在40行加上这句呢:
container.setLayout(null);
这是为什么,居然可以了~大哥不好意思了,我没分了,真的谢谢你。
-江沐风- 2014-06-30
  • 打赏
  • 举报
回复
在40行加上这句呢:
container.setLayout(null);

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧