setBounds 不适用于 Java 中的 TextField
Posted
技术标签:
【中文标题】setBounds 不适用于 Java 中的 TextField【英文标题】:setBounds is not working on TextField in Java 【发布时间】:2021-09-28 03:26:51 【问题描述】:我想在面板中添加两个文本字段。面板的布局是网格布局。 我为文本字段的高度和宽度添加了 setBounds,但 setBounds 无法正常工作。 这是我的代码...
import java.awt.*;
import javax.swing.*;
class gui1
public static void main(String[] args)
JFrame frm = new JFrame();
JPanel pan = new JPanel();
Button btn = new Button("SUBMIT");
TextField txt1 = new TextField();
TextField txt2 = new TextField();
Label lbl = new Label("LOGIN FORM");
txt1.setBounds(20,20,100,200);
txt2.setBounds(20,20,200,300);
frm.setLayout(new BorderLayout());
pan.setLayout(new GridLayout(1,2));
pan.add(txt1);
pan.add(txt2);
frm.add(pan,BorderLayout.CENTER);
frm.add(lbl,BorderLayout.NORTH);
frm.setSize(800,500);
frm.setVisible(true);
frm.setDefaultCloseOperation(frm.EXIT_ON_CLOSE);
【问题讨论】:
布局管理器可以计算边界,因此不需要手动设置边界。添加所需布局的草图。 我如何设置文本字段的大小 首先,不要混合使用 Swing 和 AWT 组件。使用所有 Swing。 “我如何设置文本字段的大小”,最简单的方法是通过接受多个列的构造函数。引用的大小将被使用的Font
大小进一步改变。 一般提示: 1) 将frm.setSize(800,500); frm.setVisible(true);
(第一行是猜测,总是错误的)更改为frm.pack(); frm.setVisible(true);
。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。 ..
.. 3) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 4) 在txt1.setBounds(20,20,100,200); txt2.setBounds(20,20,200,300);
中可以看到避免尝试设置组件边界的(许多)原因之一 - 它们具有相同的 x,y 起始位置,因此是第二个 ..
.. 会掩盖第一个。 学习如何使用(和组合)布局。
【参考方案1】:
布局管理器将根据管理器重置或忽略手动设置的值。不要手动设置 UI 边界/大小。我们有布局管理器是有原因的;使用它们。作为一般规则,如果您将布局放在其他布局中,那么您做错了。你可以通过使用不同的经理来做你想做的事。我建议使用 GridBagLayout。使用起来有点复杂,但从长远来看,你会得到更好的结果。
【讨论】:
以上是关于setBounds 不适用于 Java 中的 TextField的主要内容,如果未能解决你的问题,请参考以下文章
PreparedStatement 不适用于 Java 中的 Sybase IQ
java Codingbat notAlone——为啥它不适用于这个特定的例子