java - JFrame 未在 Eclipse Mac 中打开
问题描述
我正在尝试在我的 Mac 中通过 Eclipse 运行一个简单的 Swing 程序。应用程序运行,但我无法看到 UI 出现。
我在 Mac Mojave 和 Eclipse 版本:Oxygen.2 Release (4.7.2)
如果我通过命令行运行程序,这工作正常
下面是我的代码
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import org.saurav.simpletests.io.HttpClientTester;
public class HelloWorldSwing {
public static void main (String[] args) {
JFrame frame = new JFrame("Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel usernameLabel = new JLabel("Username");
frame.getContentPane().add(usernameLabel);
JTextField userText = new JTextField();
frame.getContentPane().add(userText);
JLabel passwordLabel = new JLabel("password");
frame.getContentPane().add(passwordLabel);
JTextField passwordText = new JTextField();
frame.getContentPane().add(passwordText);
JButton button = new JButton("Submit");
frame.getContentPane().add(button);
button.addActionListener(e -> {
// TODO Auto-generated method stub
String userName = userText.getText();
String password = passwordText.getText();
HttpClientTester httpClientTester = new HttpClientTester();
httpClientTester.executeHttp(Constants.URL, userName, password);
});
frame.setSize(100,100);
frame.pack();
frame.setVisible(true);
}
}
解决方案
请参阅以下 MCVE 中的注释:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class HelloWorldSwing {
public static void main (String[] args) {
JFrame frame = new JFrame("Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*
* JFrame (content pane) uses BorderLayout as default.
* getContentPane().add(c) adds c to BorderLayout.CENTER location which
* can hold only one component, so each add() overwrite the previous one.
* One solution is to use another layout manager like FlowLayout
*/
frame.getContentPane().setLayout(new FlowLayout());
JLabel usernameLabel = new JLabel("Username");
frame.getContentPane().add(usernameLabel);
JTextField userText = new JTextField(10); //set text field size
frame.getContentPane().add(userText);
JLabel passwordLabel = new JLabel("password");
frame.getContentPane().add(passwordLabel);
JTextField passwordText = new JTextField(10); //set text field size
frame.getContentPane().add(passwordText);
JButton button = new JButton("Submit");
frame.getContentPane().add(button);
button.addActionListener(e -> {});//this is not needed to demonstrate the problem
//frame.setSize(100,100); do not set size. Let pack set the size
frame.pack();
frame.setVisible(true);
}
}
推荐阅读
- python - 如何为seaborn图设置特定标签?
- php - 如何为 php 构建 .json 文件
- powerbi - 基于切片器动态改变 Y 轴大小
- javascript - 如何使用 discord.js 在不和谐中创建斜杠命令
- instagram - instagram api获取具有权限和范围的访问令牌未按预期工作
- rust - 为什么在尝试为所有引用类型实现特征时会出现递归
- angular - 使用 --prod 选项构建时动态加载角度组件的问题
- google-chrome-extension - chrome 扩展 - 如何使用 setTimeout 循环?
- c# - 在 C# 中使用 ECDSA 验证签名,其中签名是由 Java 生成的
- laravel - Laravel-Excel 验证在控制器方法中不断返回验证消息