【问题标题】:Adding a JTextFIeld to a Panel make whole frame goes white将 JTextFIeld 添加到面板使整个框架变白
【发布时间】:2021-07-08 00:13:21
【问题描述】:

所以我在Java中得到了那个登录类,你可以在最后找到它。 当我尝试为用户名和密码输入添加 JTextField 时,整个屏幕变白,就像它在某处呈现一样。我看不出我做错了什么。

我正在尝试使用 IntelliJ 在代码中对 UI 进行编程。

我不想使用 NetBeans 或 Eclipse GUI 工具,因为我觉得直接在代码中学习如何做会更好。

我创建的 JTextField 类可以在下面的代码末尾找到。

在整个场景中,我这样做对吗?

这就是我在 Java 中构建接口类的方式?

在网上很难找到好的材料,我正在尝试将所知道的东西应用到java中其他语言的编程中......

该类将被添加到主类中的一个主框架中,该类将是唯一的一个框架,其他类都将是面板。

感谢大家阅读,有代码:

package com.GUI;
import com.components.JButtons;
import com.components.JLabels;
import com.components.JPanels;

import javax.swing.JPanel;
import javax.swing.JTextField;
//import javax.swing.JPanel;
//import javax.swing.JTextField;

import java.awt.Color;
import java.awt.Dimension;
//import java.awt.Color;
//import java.awt.Dimension;


public class Login2 extends JPanel {

    JButtons Entrar = new JButtons(125, 25, "ENTRAR");
    JButtons Cadastrar = new JButtons(125, 25, "CADASTRAR");
    JButtons Sair = new JButtons(125, 25, "SAIR");

    public Login2() {
        this.setBounds(0, 0, 250, 540);
        this.setLayout(null);
        this.add(Container());
    }

    private JPanels Container() {
        JPanels Container = new JPanels(0, 0, 250, 540);
        Container.setLayout(null);
        Container.setBackground(Color.blue);
        Container.add(Logo());
        Container.add(Formulario());
        Container.add(ButtonsPanel());
        return Container;
    }

    private JPanels Logo(){
        JPanels Logo = new JPanels(75,30,100,100);
        Logo.setBackground(Color.red);

        return Logo;
    }

    private JPanels Formulario(){
        JPanels Formulario = new JPanels(25, 150, 200, 160);
        Formulario.setBackground(Color.YELLOW);
        Formulario.setLayout(null);
        Formulario.add(FSCPanel());
        Formulario.add(UsuarioPanel());
        Formulario.add(UsuarioFieldPanel());
        Formulario.add(SenhaPanel());
        Formulario.add(SenhaFieldPanel());
        return Formulario;
    }

    private JPanels FSCPanel(){
        JPanels FSC = new JPanels(25, 5, 150, 30);
        FSC.add(new JLabels("Faça seu LogIn!", 20, 1));
        return FSC;
    }

    private JPanels ButtonsPanel(){
        JPanels ButtonsLabel = new JPanels(50, 320, 150, 130);
        ButtonsLabel.setLayout(null);
        ButtonsLabel.add(EPanel());
        ButtonsLabel.add(CPanel());
        ButtonsLabel.add(SPanel());
        return ButtonsLabel;
    }

    private JPanels EPanel(){
        JPanels EPanel = new JPanels(10, 5, 125, 30);
        EPanel.add(Entrar);
        return EPanel;
    }

    private JPanels CPanel(){
        JPanels CPanel = new JPanels(10, 40, 125, 30);
        CPanel.add(Cadastrar);
        return CPanel;
    }

    private JPanels SPanel(){
        JPanels SPanel = new JPanels(10, 75, 125, 30);
        SPanel.add(Sair);
        return SPanel;
    }

    private JPanels UsuarioPanel(){
        JPanels UsuarioPanel = new JPanels(10, 40, 50, 20);
        UsuarioPanel.add(new JLabels("Usuario:", 12, 1));
        return UsuarioPanel;
    }

    private JPanels UsuarioFieldPanel(){
        JPanels UsuarioFieldPanel = new JPanels(10, 63, 150, 30);
        UsuarioFieldPanel.setBackground(Color.GRAY);
        UsuarioFieldPanel.setLayout(null);
        //UsuarioFieldPanel.add(UsuarioField());
        return UsuarioFieldPanel;
    }

    private JTextField UsuarioField(){
        JTextField UsuarioField = new JTextField();
        UsuarioField.setBounds(0, 0, 20, 10);
        UsuarioField.setPreferredSize(new Dimension(20, 10));
        UsuarioField.setMaximumSize(new Dimension(20, 10));
        return UsuarioField;
    }

    private JPanels SenhaPanel(){
        JPanels Senha = new JPanels(10, 100, 50, 20);
        Senha.add(new JLabels("Senha:", 12, 1));
        return Senha;
    }

    private JPanels SenhaFieldPanel(){
        JPanels SenhaFieldPanel = new JPanels(10, 125, 150, 30);
        SenhaFieldPanel.setBackground(Color.GRAY);
        SenhaFieldPanel.setLayout(null);
        //SenhaFieldPanel.add(SenhaField());
        return SenhaFieldPanel;
    }

    private JTextField SenhaField(){
        JTextField SenhaField = new JTextField();
        SenhaField.setBounds(0, 0, 0, 0);
        SenhaField.setPreferredSize(new Dimension(0, 0));
        SenhaField.setMaximumSize(new Dimension(0, 0));
        return SenhaField;
    }
}

【问题讨论】:

  • 对此我不确定,但为什么将边界设置为全零,以及尺寸的尺寸全为零?
  • @MarcusSlover 您是指每个组件还是关于 JTextfield 的组件?即使没有尺寸,屏幕也会变白,该类中的任何类型的 JTextField 都会使屏幕变白......
  • 1) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并始终如一地使用它。
  • .. 3) 为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。 4) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。 5) “但这让我想到了其他问题:” 每个 SO Q&A 都应该专注于 一个 问题。这样其他人以后更容易找到。

标签: java swing jtextfield


【解决方案1】:

在以下位置找到了解决方案:

Java SWING: adding a JTextField (never used anywhere) randomly makes the screen go white

看起来像是在添加组件后将主框架设置为可见,使 JTextFields 出现。

但这让我想到了其他问题:

这将不是我程序的唯一框架,用户登录后,它将是一个仪表板类,我只能在用户登录时添加它。

而且,如果它是真的,我可以让 Login 的按钮像 bool 一样返回吗?

我的主框架只添加了“登录”,那我该怎么做呢?

我应该打开其他堆栈吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2018-02-16
    相关资源
    最近更新 更多