当前位置: 首页 > 知识库问答 >
问题:

要用窗口调整组件大小吗?

越勇
2023-03-14

我想让JFrame上的组件随着窗口的大小调整而调整大小。

这怎么能做到。

当前,当我使JFrame变小时,组件会保留在相同的位置,然后随着框架变小而消失。

理想情况下,我希望设置一个最小的JFrame大小,它不允许表单变小,但当我将其变大时,组件应该随JFrame移动。

补充:如果我想使用绝对布局管理器,该怎么办。这是我老板比较喜欢的布局经理。

代码:

公共类TestFrame扩展JFrame{private static final long serialVersionUID=1L;private JPanel ContentPane;private JButton BtnewButton;private JButton BtnewButton_1;private JButton BtnewButton_2;private JCheckBox ChckbxNewCheckbox;private JCheckBox ChckbxNewCheckbox_1;private JCheckBox ChckbxNewCheckbox_2;

public static void main(String[] args) {
    TestFrame frame = new TestFrame();
    frame.setVisible(true);
}

public TestFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 629, 458);

    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(15, 15, 15, 15));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    btnNewButton = new JButton("Save");
    btnNewButton.setFont(new Font("Sylfaen", Font.BOLD, 14));
    btnNewButton.setBounds(514, 386, 89, 23);
    contentPane.add(btnNewButton);

    btnNewButton_1 = new JButton("Open");
    btnNewButton_1.setBounds(514, 352, 89, 23);
    contentPane.add(btnNewButton_1);

    btnNewButton_2 = new JButton("Close");
    btnNewButton_2.setBounds(514, 318, 89, 23);
    contentPane.add(btnNewButton_2);
    btnNewButton_2.setBackground(Color.YELLOW);
    btnNewButton_2.setEnabled(false);

    chckbxNewCheckBox = new JCheckBox("Employeed");
    chckbxNewCheckBox.setBounds(506, 7, 97, 23);
    contentPane.add(chckbxNewCheckBox);

    chckbxNewCheckBox_1 = new JCheckBox("Not Employeed");
    chckbxNewCheckBox_1.setBounds(506, 33, 97, 23);
    contentPane.add(chckbxNewCheckBox_1);

    chckbxNewCheckBox_2 = new JCheckBox("Self Employeed");
    chckbxNewCheckBox_2.setBounds(506, 59, 97, 23);
    contentPane.add(chckbxNewCheckBox_2);

}

}

GridBagLayout的示例:

这是GridBagLayout的一个示例。组件的大小调整正确,但我没有看到一个grow属性。它必须自动做到这一点。

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

public class GridBagLayoutDemo {
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    final static boolean RIGHT_TO_LEFT = false;

    public static void addComponentsToPane(Container pane) {
    JButton button;
    pane.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    button = new JButton("Button 1");
    if (shouldWeightX) {
    c.weightx = 0.5;
    }
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 0;
    pane.add(button, c);

    button = new JButton("Button 2");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.gridx = 1;
    c.gridy = 0;
    pane.add(button, c);

    button = new JButton("Button 3");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0.5;
    c.gridx = 2;
    c.gridy = 0;
    pane.add(button, c);

    button = new JButton("Long-Named Button 4");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.ipady = 40;      //make this component tall
    c.weightx = 0.0;
    c.gridwidth = 3;
    c.gridx = 0;
    c.gridy = 1;
    pane.add(button, c);

    button = new JButton("5");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.ipady = 0;       //reset to default
    c.weighty = 1.0;   //request any extra vertical space
    c.anchor = GridBagConstraints.PAGE_END; //bottom of space
    c.insets = new Insets(10,0,0,0);  //top padding
    c.gridx = 1;       //aligned with button 2
    c.gridwidth = 2;   //2 columns wide
    c.gridy = 2;       //third row
    pane.add(button, c);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("GridBagLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addComponentsToPane(frame.getContentPane());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        createAndShowGUI();
    }
}

共有1个答案

海信鸥
2023-03-14

使用布局管理器,如GridBagLayout,它有一个属性调用“grow”,用于列。

 类似资料:
  • 问题内容: 我正在使用Java编写一个简单的绘画程序,并且每当调整JFrame组件的大小时,我都希望调用某种方法。但是我找不到像windowResizedListener之类的任何方法或诸如windowResizedEvent之类的事件。我能做什么?! 问题答案: 实现一个具有:

  • 窗口大小,我们可以非常方便的使用width、height调整,但是如何知道 width和height是一个问题? 在 Window 操作系统中,假如我们想要缩放,我们通常会把鼠标移动到窗口的右边栏,和底部边栏,以及右下边栏。 而且在不同的边栏,鼠标呈现的样式也是不一样的。当我们在右边栏的时候我们可以通过cursor: e-resize;模拟鼠标样式。 在底部边栏我们可以通过cursor: s-re

  • #include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

  • 问题内容: 如何挂接到浏览器窗口调整大小事件? 有一种jQuery侦听调整大小事件的方法,但我不希望仅出于这一要求就将其引入我的项目中。 问题答案: jQuery只是包装了标准的DOM事件,例如。 jQuery 可以 做一些工作来确保在所有浏览器中一致地触发resize事件,但是我不确定任何浏览器是否有所不同,但是我建议您在Firefox,Safari和IE中进行测试。

  • 问题内容: 我有以下JQuery代码: 唯一的问题是,这仅在首次加载浏览器时有效,我是否还希望在调整窗口大小时进行检查? 有任何想法吗? 问题答案: 这是一个使用jQuery,javascript和css处理调整大小事件的示例。 (如果您只是通过调整大小来设置样式(媒体查询),最好的方法是CSS) [ CSS javascript jQuery 如何停止调整大小的代码执行如此频繁! 这是绑定到调整