BoxLayout:无法设置子组件大小

2024-01-29

我有一个JFrame - SuperTest and JPanel - SuperLogin。登录面板具有用户名和密码输入字段以及登录按钮。我希望它看起来像这样:

但如下图所示,输入字段的高度和宽度太大。

超级测试.java:

import javax.swing.*;

public class SuperTest extends JFrame {
    public SuperTest()  {
        add(new SuperLogin());
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(600, 400);
    }

    public static void main(String[] args) {
        SuperTest test = new SuperTest();
    }
}

超级登录.java:

import javax.swing.*;
import java.awt.*;

public class SuperLogin extends JPanel {
    private JButton loginButton =
            new JButton("Login");
    private TextField usernameField =
            new TextField();
    private TextField passwordField =
            new TextField();

    public SuperLogin()  {
        BoxLayout layout =
                new BoxLayout(this, BoxLayout.Y_AXIS);
        setLayout(layout);

        add(new JLabel("Login"));

        add(usernameField);
        add(passwordField);
        add(loginButton);

        componentSetup();
    }

    private void componentSetup()  {
        loginButton.setSize(20, 10);
        usernameField.setSize(100, 50);
        passwordField.setSize(100, 50);

        loginButton.setMinimumSize(new Dimension(20, 10));
        usernameField.setMinimumSize(new Dimension(100, 50));
        passwordField.setMinimumSize(new Dimension(100, 50));

        loginButton.setPreferredSize(new Dimension(20, 10));
        usernameField.setPreferredSize(new Dimension(100, 50));
        passwordField.setPreferredSize(new Dimension(100, 50));

    }
}

我读到设置 min, Preferred size 就足够了,但看起来还不够。


我把所有东西都放在一个类中。代码后面有解释。

import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class SuperOne implements Runnable {
    private JButton  loginButton;
    private JFrame  frame;
    private JPasswordField  passwordField;
    private JTextField  usernameField;

    @Override
    public void run() {
        showGui();
    }

    private JPanel createLoginPanel() {
        JPanel loginPanel = new JPanel();
        BoxLayout layout = new BoxLayout(loginPanel, BoxLayout.PAGE_AXIS);
        loginPanel.setLayout(layout);
        loginPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        JLabel loginLabel = new JLabel("Login");
        loginLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
        usernameField = new JTextField(10);
        usernameField.setAlignmentX(Component.CENTER_ALIGNMENT);
        passwordField = new JPasswordField(10);
        passwordField.setAlignmentX(Component.CENTER_ALIGNMENT);
        loginButton = new JButton("login");
        loginButton.setAlignmentX(Component.CENTER_ALIGNMENT);
        loginPanel.add(loginLabel);
        loginPanel.add(Box.createVerticalStrut(15));
        loginPanel.add(usernameField);
        loginPanel.add(Box.createVerticalStrut(5));
        loginPanel.add(passwordField);
        loginPanel.add(Box.createVerticalStrut(5));
        loginPanel.add(loginButton);
        return loginPanel;
    }

    private void showGui() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createLoginPanel());
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    /**
     * Start here.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new SuperOne());
    }
}
  1. 所有处理 GUI 组件的代码都必须在事件调度线程(美东时间)。虽然不是强制性的,但我喜欢通过调用显式启动 EDTEventQueue.invokeLater().
  2. 请参阅包含教程的网页BoxLayout出现在其他答案 https://stackoverflow.com/questions/63159903/boxlayout-cant-setup-child-component-size/63160300#63160300.
  3. JTextField and JPasswordField两者都有一个columns财产。我发现设置所需宽度比使用更好setPreferredSize()

这是正在运行的应用程序的屏幕截图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BoxLayout:无法设置子组件大小 的相关文章

随机推荐

  • 当用户拖动鼠标时监听 JFrame 调整大小事件?

    当用户单击 JFrame 的一角来调整大小并拖动鼠标时 JFrame 将根据用户拖动时鼠标的当前位置重新绘制 您如何收听这些事件 以下是我目前尝试过的 public final class TestFrame extends JFrame
  • 使用 jQuery 提取 XML 中的 CDATA 以用作 HTML 内容

    我正在检索 Google Earth kml xml 文件并使用该内容在 Google 地图中放置标记 我感兴趣的特定 XML 标签如下所示
  • 量角器测试未在 Firefox 上启动

    我有一组在 chrome 上运行良好的测试 但是当我将功能 browserName 从 chrome 更改为 firefox 时 甚至没有收到错误信息 Before capabilities browserName chrome chrom
  • 位置服务 onProviderEnabled 从未被调用

    我有一项可以在我的应用程序中更新位置的服务 当我在禁用 GPS 的情况下启动应用程序 返回 Android 菜单并启用 GPS 最后返回我的应用程序 服务尚未被销毁 时 永远不会调用 onProviderEnabled 有人可以帮忙吗 UP
  • 空列表布尔值

    这可能很愚蠢 但对我来说有点令人困惑 In 697 l In 698 bool l Out 698 False In 699 l True Out 699 False In 700 l False Out 700 False In 701
  • 为什么 CORS 默认禁用?

    好吧 首先 我绝对知道我们对此有很多答案 并且有大量关于该主题的文章 在输入以下内容之前 我刚刚阅读了这些答案 为什么没有凭据的 CORS 被禁止 https stackoverflow com questions 26306080 why
  • Zurb Foundation 5 - 行填充/边距

    我正在尝试为我的行创建背景颜色 但是当我设置背景颜色时 它会扩展到列的常规宽度 然后我尝试使用填充来缩小行 这有效 但使列更小 我需要以某种方式删除粉红色区域 仅保留红色背景 并保持列均匀 有任何想法吗 div class row styl
  • Apache Bench 和 POST 数据

    我正在尝试使用 apache bench 在我的 Rails 应用程序中加载测试创建操作 但 ab 似乎没有发送 POST 数据 尽管它确实正确提交了 POST 而不是 GET 请求 这是我运行的命令 ab n 1 p post v 4 h
  • 如何通过 Meteor.call() 访问服务器端变量?

    我认为在 Meteor 中定义服务器端类来存储有关系统的信息是明智的做法 该信息应由选定的用户访问 它不存储在 MongoDB 中 所以据我了解 订阅和发布不是一个选项 这是我的简化方法 if Meteor isServer serverV
  • 如何检查Paramiko是否成功将文件上传到SFTP服务器?

    我使用 Paramiko 将文件放入 SFTP 服务器 import paramiko transport paramiko Transport host port transport connect username username p
  • 禁用 HTML 中的 GIF 动画

    在 HTML 中 有没有办法在 标签中包含动画 GIF 但自动告诉 GIF 不要动画 我意识到用户可以通过按 ESC 或单击 停止 来停止动画 但我希望 GIF 根本不动画 我只想在一个特定页面上执行此操作 并且制作 1500 GIF 的单
  • Xcode 4.3.3 iPhone 5.1 模拟器经常挂起

    我最近一直在四处寻找是否有人遇到类似的问题 但找不到太多信息 大多数时候在模拟器中启动应用程序效果很好 但是模拟器每天都会挂起一两次 我必须强制退出它 XCode 说 在模拟器上运行 xyz 当您尝试在 XCode 中 停止 时 什么也不会
  • ng-bootstrap crash:如何应用动画?

    我正在使用折叠 https ng bootstrap github io components collapse https ng bootstrap github io components collapse 然而 它并没有动画 即使不在
  • Laravel sql server 更改架构的表名称

    我正在开发一个项目 我试图在 SQL Server 数据库上设置一些具有架构的表 因此我手动将表名称更改为迁移文件上的 schema name table name 并且它起作用了 所以这里是例子 Schema create elector
  • 如何在 Django Rest Framework 中过滤具有权限的用户相关记录

    我需要知道如何限制对经过身份验证的用户的访问 以便可以为以管理员身份登录的用户完整列出用户记录 而对于以用户身份登录的用户 只能列出 更新和创建他们的记录 目前我正在使用serializers ModelSerializer viewset
  • Knockout.js 嵌套可排序绑定

    我正在使用 knockout js 可排序插件 然而 我遇到了一个至今无法解决的问题 我有两个可排序的绑定 一个用于存储桶 另一个用于存储桶项目 我能够在存储桶之间重新排序存储桶项目 但是 我无法重新排序存储桶 你知道为什么会这样吗 我也使
  • Postgres 中动态基数的累积添加

    我在 Postgres 中有以下场景 我正在使用9 4 1 我有一个这种格式的表 create table test id serial val numeric not null created timestamp not null def
  • 合并从不同表投影到一个实体的两个 iqueryable

    我努力了这个答案 https stackoverflow com questions 4003813 how to merge two iqueryable lists This one https stackoverflow com qu
  • Golang 比较和更新来自两个不同映射字符串接口的键

    将两个 yaml 文件解组到两个不同的映射后 我想比较两个映射的键 外部键和内部键 因为它是嵌套映射 以及第一个映射 configMap 中是否存在任何键 外部或内部键 和第二张地图 userconfigMap 中不存在 我想将该密钥附加到
  • BoxLayout:无法设置子组件大小

    我有一个JFrame SuperTest and JPanel SuperLogin 登录面板具有用户名和密码输入字段以及登录按钮 我希望它看起来像这样 但如下图所示 输入字段的高度和宽度太大 超级测试 java import javax