如何在java swing中禁用文本字段的大小调整?

发布于 2024-12-29 22:47:53 字数 789 浏览 0 评论 0原文

我有一个 GUI,它基于使用 BorderLayout 的 Swing 的 JPanel。在北面板中,我添加了一个新的 JPanel,它使用 FlowLayout 并包含两个 textField 和其他组件。 当我更改文本字段的文本并且使该面板内的某些组件不可见时,该文本字段不断调整大小。我怎样才能避免这种情况?我希望文本字段无论发生什么情况都保持相同的大小。我尝试过 setSize、setPreferredSize、setMinimumSize 但没有成功。

txtSource = new WebTextField(source);
    txtSource.setMaximumSize(new Dimension(30,20));
    txtSource.setMinimumSize(new Dimension(20, 20));
    txtSource.setEditable(false);
    txtDestination = new WebTextField(destination);
    txtDestination.setMaximumSize(new Dimension(30,20));
    txtDestination.setMinimumSize(new Dimension(20, 20));

之前: 在此处输入图像描述

之后: 在此处输入图像描述

I have a GUI, which is based on Swing's JPanelthat uses BorderLayout.In the north panel i have added a new JPanel which uses FlowLayout and contains two textField and other components.
When I change the text of textField and invisible some componets inside this panel, this textField keeps resizing. How can I avoid this? I would like the textField to keep the same size whatever happens. I've tried setSize, setPreferredSize, setMinimumSize with no success.

txtSource = new WebTextField(source);
    txtSource.setMaximumSize(new Dimension(30,20));
    txtSource.setMinimumSize(new Dimension(20, 20));
    txtSource.setEditable(false);
    txtDestination = new WebTextField(destination);
    txtDestination.setMaximumSize(new Dimension(30,20));
    txtDestination.setMinimumSize(new Dimension(20, 20));

before:
enter image description here

after:
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

物价感观 2025-01-05 22:47:53

当我更改文本字段的文本并且隐藏此面板内的某些组件时,此文本字段不断调整大小。

此示例显示大小恒定的文本字段。您可以添加一个 SSCCE 的代码吗?

文本字段大小

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

class TextFieldSize {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JTextField smallField = new JTextField(5);
                JTextField largeField = new JTextField(20);
                JPanel gui = new JPanel(new FlowLayout());
                gui.add( smallField );
                gui.add( largeField );
                JFrame f = new JFrame("Text Field Size");
                f.add(gui);
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }
}

When I change the text of textField and invisible some componets inside this panel, this textField keeps resizing.

This example shows text fields at a constant size. Can you add an SSCCE of code that does not?

Text Field Size

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

class TextFieldSize {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JTextField smallField = new JTextField(5);
                JTextField largeField = new JTextField(20);
                JPanel gui = new JPanel(new FlowLayout());
                gui.add( smallField );
                gui.add( largeField );
                JFrame f = new JFrame("Text Field Size");
                f.add(gui);
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }
}
戒ㄋ 2025-01-05 22:47:53

你不能像你想要的那样做到这一点,一些 LayoutManagers 会忽略 setXxxSize,但你可以使用接受 的 fe BoxLayout setXxxSize

you can't do this like what you want, some LayoutManagers ignore for setXxxSize, but you can use f.e. BoxLayout that accepts for setXxxSize

萝莉病 2025-01-05 22:47:53
//This works best for me:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class NoResizeJTextField {
    public static void main(String[] args) {
        final JFrame frame = new JFrame();  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setPreferredSize(new Dimension(500,300));  
        JPanel panel = new JPanel();  
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.add(new JLabel("Text: "));
        JTextField tf = new JTextField(30);
        tf.setMaximumSize(tf.getPreferredSize());
        tf.setMinimumSize(tf.getPreferredSize());
        panel.add(tf);
        frame.add(panel);   
        SwingUtilities.invokeLater(new Runnable() {             
            public void run() {  
                frame.pack();  
                frame.setVisible(true);  
            }  
        });  
    }
}
//This works best for me:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class NoResizeJTextField {
    public static void main(String[] args) {
        final JFrame frame = new JFrame();  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setPreferredSize(new Dimension(500,300));  
        JPanel panel = new JPanel();  
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.add(new JLabel("Text: "));
        JTextField tf = new JTextField(30);
        tf.setMaximumSize(tf.getPreferredSize());
        tf.setMinimumSize(tf.getPreferredSize());
        panel.add(tf);
        frame.add(panel);   
        SwingUtilities.invokeLater(new Runnable() {             
            public void run() {  
                frame.pack();  
                frame.setVisible(true);  
            }  
        });  
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文