java swing 自由布局_java swing布局

java swing 自由布局_java swing布局展开全部 nulllayout 不是很好 所有的东西都要自己定义 一旦窗口大小 e59b9ee7ad86 变化就要重新计算 我建议使用 MigLayout 上手慢 但很强大 http www miglayout com 而且 就算你要用内建的 LayoutManage 还有一个 GridBagLayou 比 G

展开全部

null layout不是很好,所有的东西都要自己定义,一旦窗口大小e59b9ee7ad86132变化就要重新计算。我建议使用MigLayout。上手慢,但很强大。http://www.miglayout.com

而且,就算你要用内建的Layout Manager,还有一个GridBag Layout,比Grid Layout更强大一点。

接下来,那个边框,不是JSeparator, 而是一个边框。我猜是Border result = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), “修改信息: “);

如果是我,使用MigLayout,以上代码还是比较简单的:import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javax.swing.border.Border;

import javax.swing.border.EtchedBorder;

import net.miginfocom.swing.MigLayout;

public class MyFrame extends JFrame {

public MyFrame() {

begin();

}

private void begin() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(new MigLayout(“insets 10, fill”, “[]”, “[]5[]”));

//first panel

JPanel first = new JPanel();

//first这个panel有5像素的边缘,2列,3行。第一列右对齐,占40%宽度;第二列默认,左对齐,占据剩余所有空间。

first.setLayout(new MigLayout(“insets 5, fill”, “[right, 40%]5[fill, grow]”, “[]5[]5[]”));

first.setOpaque(false);

//这个面板的border有些特殊:createTitledBorder()方法的签名可以有两个:前一个是线的类型,后面一个是标题文本。

Border result = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), “修改信息: “);

first.setBorder(result);

//把first加到contentPane里面

add(first, “cell 0 0, grow”);

JLabel original = new JLabel(“输入原密码: “);

JLabel newPass = new JLabel(“输入新密码: “);

JLabel confirm = new JLabel(“确认新密码: “);

JTextField orig_field = new JTextField();

JTextField new_field = new JTextField();

JTextField confirm_field = new JTextField();

//miglayout的核心就是网格排布。用坐标来定义添加元素的位置

first.add(original, “cell 0 0, w 100!”);      //add to col 0, line 0, min:pref:max width all set to 100

first.add(newPass, “cell 0 1, w 100!”);       //add to col 0, line 1

first.add(confirm, “cell 0 2, w 100!”);       //add to col 0, line 2

first.add(orig_field, “cell 1 0, w 150!”);    //add to col 1, line 0, min:pref:max width all set to 150

first.add(new_field, “cell 1 1, w 150!”);    //add to col 1, line 1

first.add(confirm_field, “cell 1 2, w 150!”);    //add to col 1, line 2

//按钮面板

JPanel buttons = new JPanel();

buttons.setOpaque(false);

//边缘为5像素;有两列,中间是10像素的间距,列内元素居中;有一行,行中上下对齐也是居中

buttons.setLayout(new MigLayout(“insets 5, fill”, “[center]10[center]”, “[center]”));

JButton yes = new JButton(“Y. 确定”);

//快捷键设为虚拟键Y,得到下划线效果

yes.setMnemonic(KeyEvent.VK_Y);

JButton quit = new JButton(“Q. 退出”);

//快捷键设为虚拟键Q,得到下划线效果

quit.setMnemonic(KeyEvent.VK_Q);

//把yes按钮加到第一列第一行,min:pref:max的大小都设为100像素

buttons.add(yes, “cell 0 0, w 100!”);

//把quit按钮加到第二列第一行,min:pref:max的大小都设为100像素

buttons.add(quit, “cell 1 0, w 100!”);

//把按钮面板加到contentPane里面

add(buttons, “cell 0 1, grow”);

pack();

setBounds(0, 0, 500, 400);

setLocationRelativeTo(null);

setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

MyFrame frame = new MyFrame();

}

});

}

}

效果是这样:

d1622d931ff5f38e81f241daf272083b.gif

MigLayout还允许你使用辅助线来debug。把这一行:first.setLayout(new MigLayout(“insets 5, fill”, “[right, 40%]5[fill, grow]”, “[]5[]5[]”));

改成:first.setLayout(new MigLayout(“insets 5, fill,debug”, “[right, 40%]5[fill, grow]”, “[]5[]5[]”));

你就可以看到first面板里面的辅助线了。

76b3c30cb63df88bf0600a328e7816fb.gif

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212914.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:57
下一篇 2026年3月18日 下午6:58


相关推荐

  • 当黑客说:我入侵了你的电脑,并拍下你看XXOO的画面时,你该怎么办?[通俗易懂]

    当黑客说:我入侵了你的电脑,并拍下你看XXOO的画面时,你该怎么办?[通俗易懂]以后浏览某些网站时,一定要记得把你的前置摄像头遮住,否则,你可能会被敲诈~底下这封邮件,可能会让那些没遮住摄像头的朋友们心慌慌~(不喜欢看英文的童鞋请移步图下,编辑为你贴…

    2022年7月17日
    12
  • 用nginx部署前端项目

    用nginx部署前端项目前端的默认首页使用 index html 在部署的时候会用到该页面 将打包好的前端页面放在服务器 centos 或 ubuntu 指定路径 如 home project shopping 项目包含 js css 和 html 等 ubuntu 安装 nginxsudosur getinstallng 查看 nginx 是否安装成功 nginx vnginx 安装成功后的位置如下 usr sbin nginx 主程序 etc nginx 配置文件所在

    2026年3月19日
    2
  • AI进化速递:智谱发布OpenClaw专用模型,行业大变革来临!

    AI进化速递:智谱发布OpenClaw专用模型,行业大变革来临!

    2026年3月17日
    2
  • k8s监控工具(k8s工具)

    工具集合:后渗透:Kubesploit:https://github.com/cyberark/kubesploit安全评估:RedKube:https://github.com/lightspin-tech/red-kube容器攻击工具:ccat:https://github.com/RhinoSecurityLabs/ccat安全测试:Kubestriker:https://github.com/vchinnipilli/kubestriker地址GitHub-aqu

    2022年4月17日
    62
  • js对象遍历和合并

    js对象遍历和合并对象遍历对象 键 值 object keys 会返回对象中键的数组 object values 会返回对象中值的数组 Object entries 是返回一个给定对象自身可枚举属性的键值对数组 varvarobj a 1 b 2 c 4 目标对象 console log 索引 Object keys obj console log 价值 Object values obj console log entries 输出 Object ent

    2026年3月26日
    2
  • android之View的启动过程[通俗易懂]

    程序里调用了onSizeChanged方法进行了一些设置,不知道onSizeChanged是在什么时候启动的,所以研究了一下View的启动流程代码如下:public class TestView extends View { public TestView(Context context) { super(context); Log.d(“mDebug”, “TestV

    2022年3月10日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号