【问题标题】:Cannot see the JTextField after adding JLabel and JButton添加 JLabel 和 JButton 后看不到 JTextField
【发布时间】:2019-05-14 23:27:30
【问题描述】:

我正在尝试添加基本的JFrame,我在其中添加了JLabelJButtonJTextField。但一次只出现两件事。

我希望这三个都出现在框架中。

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

public class Main {
    JFrame f;
    JLabel l1;
    JButton b1;
    JTextField tf1;

    public Main(){
        f=new JFrame();
        l1=new JLabel("This is the new Label");
        l1.setBounds(10,20,50,30);
        b1=new JButton("Submit");
        b1.setBounds(50,70,90,40);
        tf1=new JTextField();
        tf1.setBounds(70,100,90,40);

        f.add(l1);
        f.add(b1);
        f.add(tf1);
        l1.setLayout(new BorderLayout());

        f.setVisible(true);
        f.setSize(500,500);
        f.setLayout(null);
    }

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

【问题讨论】:

  • 1) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。
  • 你能举个例子基本的会优先
  • 您能按照说明进行操作吗?请参阅我的第二点。

标签: java swing awt layout-manager


【解决方案1】:

看看下面的代码是否适合你。我只在您的代码中更改了这些行:

f.add(l1, BorderLayout.NORTH);
f.add(b1, BorderLayout.SOUTH);
f.add(tf1, BorderLayout.CENTER);
//f.setLayout(null);

完整代码:

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

public class Main {
  JFrame f;
  JLabel l1;
  JButton b1;
  JTextField tf1;

  public Main(){
    f=new JFrame();
    l1=new JLabel("This is the new Label");
    l1.setBounds(10,20,50,30);
    b1=new JButton("Submit");
    b1.setBounds(50,70,90,40);
    tf1=new JTextField();
    tf1.setBounds(70,100,90,40);

    f.add(l1, BorderLayout.NORTH);
    f.add(b1, BorderLayout.SOUTH);
    f.add(tf1, BorderLayout.CENTER);
    l1.setLayout(new BorderLayout());

    f.setVisible(true);
    f.setSize(500,500);
    //f.setLayout(null);
  }

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

【讨论】:

    【解决方案2】:

    您的代码中唯一的错误是:

    您在设置框架布局之前放置了 f.setVisible(true)。 你在构造函数中的最后几行应该是这样的:

    f.setLayout(null);
    f.setSize(500,500);
    f.setVisible(true);
    

    setVisible() 仅在您进行所有更改后才应调用 想,在框架上。

    同时删除行 l1.setLayout()。我不明白你为什么在这里设置标签的布局。

    【讨论】:

    • 感谢它为我工作的答案。这个 l1.setLayout() 只是测试。谢谢。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多