【问题标题】:Java Swing GUI - Messy interface - Field is not showing upJava Swing GUI - 混乱的界面 - 字段未显示
【发布时间】:2023-04-10 23:13:01
【问题描述】:

电子邮件字段覆盖在名称字段上......并且按钮未显示。

我正在尝试制作一个简单的注册屏幕。

package javainterfacegrafica;

import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class JavaInterfaceGrafica extends JFrame {

private void TelaJava(){
    Container janela = getContentPane();
    setLayout(null);

    //Definindo os rótulos
    JLabel labelUsername = new JLabel("Username: ");
    JLabel labelPassword = new JLabel("Password: ");
    JLabel labelConfirmPassword = new JLabel("Confirm Pass.: ");
    JLabel labelName = new JLabel("Name: ");
    JLabel labelEmail = new JLabel("Email: ");
    labelUsername.setBounds(50,40,100,20);
    labelPassword.setBounds(50,80,100,20);
    labelConfirmPassword.setBounds(50,120,120,20);
    labelName.setBounds(50,160,100,20);
    labelEmail.setBounds(50,160,100,20);

    JFormattedTextField jFormattedTextUsername = new JFormattedTextField();
    JFormattedTextField jFormattedTextPassword = new JFormattedTextField();
    JFormattedTextField jFormattedTextConfirmPassword = new JFormattedTextField();
    JFormattedTextField jFormattedTextName = new JFormattedTextField();
    JFormattedTextField jFormattedTextEmail = new JFormattedTextField();
    jFormattedTextUsername.setBounds(150,40,100,20);
    jFormattedTextPassword.setBounds(150,80,100,20);
    jFormattedTextConfirmPassword.setBounds(150,120,100,20);
    jFormattedTextName.setBounds(150,160,180,20);
    jFormattedTextEmail.setBounds(150,160,180,20);


    //Botão
    JButton btn = new JButton("Salvar");


    //Adiciona os rótulos e os campos de textos com máscaras na tela
    janela.add(labelUsername);
    janela.add(labelPassword);
    janela.add(labelConfirmPassword);
    janela.add(labelName);
    janela.add(labelEmail);
    janela.add(jFormattedTextUsername);
    janela.add(jFormattedTextPassword);
    janela.add(jFormattedTextConfirmPassword);
    janela.add(jFormattedTextName);
    janela.add(jFormattedTextEmail);
    janela.add(btn);

    setSize(800, 600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

}


public static void main(String[] args) {

    JavaInterfaceGrafica jig = new JavaInterfaceGrafica();``
    jig.TelaJava();

}
}

【问题讨论】:

  • 1) 不要在问题描述中重复相同的句子。 2) 不要使用空布局和 setBounds()。管理边界会给您带来问题(正如您所注意到的),因为并非所有值都是唯一的,并且您没有为按钮指定边界。 3) 相反,您应该使用Layout Managers。 Swing 旨在与布局管理器一起使用。阅读 Layout Managers 上的 Swing 教程部分。我建议您可以使用GridBagLayout 以网格形式显示组件。

标签: java swing layout-manager null-layout-manager


【解决方案1】:

由于以下labelName.setBounds(50,160,100,20); labelEmail.setBounds(50,160,100,20);,您的电子邮件布局被覆盖,您基本上在框架上为它们提供了相同的位置。对于您的按钮,请尝试使用 setBounds(x, x, x, x); 在布局中为其指定一个位置。此外,对于像您这样的简单登录布局,我建议使用 2 列和 5 行的 GridLayout(您的登录按钮的第五个)。

【讨论】:

  • 不要使用 GridLayout,它会将所有组件调整为相同大小。
猜你喜欢
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2012-07-26
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多