首页 > 解决方案 > Java Swing 标签未出现

问题描述

这是我第一次学习 Java Swing,我有一个标签并且 setLocation 不起作用。有人告诉我这是因为您必须将布局设置为null,否则它们将设置为默认位置和大小。所以我做了,现在我的标签没有出现

import java.util.*;
import javax.swing.*; 
public class School {
    private ArrayList <String> Usernames = new ArrayList <> ();
    private ArrayList <String> Passwords = new ArrayList <> ();
    public void registerUser(){
        JFrame Register = new JFrame("Register");  
        JLabel Username = new JLabel("Username: ");
        Username.setBounds(50, 50, 100, 30);
        Register.add(Username);
        Register.setVisible(true);
        Register.setSize(500, 500);
        Register.setLayout(null);
        Register.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main (String [] args){
        School example = new School();
        example.registerUser();
    }
}

标签: javaswingjlabel

解决方案


这是一个简单的例子,我纠正了一些问题。

  1. 我使用的是默认布局,而不是null. 如果您了解如何使用默认值,它们会很好地工作。

  2. 我使用 aJPanel而不是直接将组件添加到JFrame. JFrames实际上使用了一个相当混乱的布局,最好只是把东西放在一个面板中,这使得布局更直观。

  3. 我正在使用垂直框和水平框并将它们嵌套(将一个放在另一个里面)。当我第一次开始时,这是一种制作简单格式化布局的简单方法。

  4. 我将标签和文本字段放在一个循环中,这样您就可以看到如何在一个循环中制作多个组件并仍然将它们布置好。

  5. 我更改了您的几个变量名称以符合 Java 编码约定(对局部变量和字段使用小写)。

  6. 我第一次添加了一个更传统的序列来显示一个窗口。

  7. 我还在 Event Dispatch Thread 上启动了您的 Swing 代码。您应该对所有 Swing 代码执行此操作。

轻度测试:

package stackoverflow;

import java.util.*;
import javax.swing.*;


public class BasicWindow {

   private ArrayList<String> userNames = new ArrayList<>();
   private ArrayList<String> passwords = new ArrayList<>();

   public void registerUser() {
      JFrame register = new JFrame( "Register" );
      JPanel panel = new JPanel();
      Box vbox = Box.createVerticalBox();
      
      for( int i = 0; i < 4; i++ ) {
         Box hbox = Box.createHorizontalBox();
         JLabel username = new JLabel( "Username: " );
         hbox.add( username );
         JTextField input = new JTextField( 25 );
         hbox.add( input );
         vbox.add( hbox );
      }
      panel.add( vbox );
      register.add( panel );
      register.setSize( 500, 500 );
      register.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      register.setLocationRelativeTo( null );  // center on screen
      register.setVisible( true );
   }

   public static void main( String[] args ) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            BasicWindow example = new BasicWindow();
            example.registerUser();
         }
      });
   }
}

推荐阅读