java - 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();
}
}
解决方案
这是一个简单的例子,我纠正了一些问题。
我使用的是默认布局,而不是
null
. 如果您了解如何使用默认值,它们会很好地工作。我使用 a
JPanel
而不是直接将组件添加到JFrame
.JFrames
实际上使用了一个相当混乱的布局,最好只是把东西放在一个面板中,这使得布局更直观。我正在使用垂直框和水平框并将它们嵌套(将一个放在另一个里面)。当我第一次开始时,这是一种制作简单格式化布局的简单方法。
我将标签和文本字段放在一个循环中,这样您就可以看到如何在一个循环中制作多个组件并仍然将它们布置好。
我更改了您的几个变量名称以符合 Java 编码约定(对局部变量和字段使用小写)。
我第一次添加了一个更传统的序列来显示一个窗口。
我还在 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();
}
});
}
}
推荐阅读
- ios - 如何从 iOS swift 中的照片库中获取最佳 OCR 文本结果?
- r - 如何在 geom_point 点图中仅显示前 10 个类别和值?
- google-compute-engine - 了解 Google Compute Engine 的实例/cpu/利用率
- python - 更改 Builder 方法
- javafx - How to display day from selected date using javafx?
- android - Error :- Android resource linking failed, how fix this?
- vim - 如何以不同于其内容的方式突出显示代码块的标签?
- python - 如何在 matplotlib 中操作 xticks 与数据框图相同
- rest - InfluxDB http calls sending credentials (username & password) in URL as query params
- reactjs - 无法使用 Redux,Sagas 访问第二个组件中的第一个组件状态