Java 按下按钮时JComboBox和JTextField消失
我在创建一个简单的应用程序来计算每秒的点击次数时遇到了一些问题。代码如下:Java 按下按钮时JComboBox和JTextField消失,java,swing,Java,Swing,我在创建一个简单的应用程序来计算每秒的点击次数时遇到了一些问题。代码如下: import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.border.Border; public class CPSFrame implements ActionListener { JFrame f
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.Border;
public class CPSFrame implements ActionListener {
JFrame frame;
JPanel borderPanel, settings;
JButton click;
String[] timesList = {"5","10","15","20","25","30"};
JComboBox times;
JTextField showCps;
public CPSFrame() {
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
CPSFrame c = new CPSFrame();
c.drawGui();
}
});
}
public void drawGui() {
frame = new JFrame();
borderPanel = new JPanel();
settings = new JPanel();
click = new JButton("Click me!");
times = new JComboBox(timesList);
showCps = new JTextField();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("CPS Calculator");
{
borderPanel.setLayout(new BorderLayout(0, 0));
frame.add(borderPanel);
{
borderPanel.add(click);
settings.setLayout(new GridLayout(1, 0, 0, 0));
borderPanel.add(settings, BorderLayout.SOUTH);
{
settings.add(times);
settings.add(showCps);
}
}
}
frame.pack();
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent evt) {
}
}
出于某种原因,如果我调整JFrame的大小并按单击
,则时间
和显示CP
都会消失。我有一种感觉,这与我设置边界布局的方式有关,但我不确定
下面是正在发生的事情的一个例子
编辑:更新了代码并添加了正在发生的事情的视频。对我来说很好(Java 1.6,Win),调整大小并单击后,没有任何内容消失。尝试指定c.click的位置c.borderPanel.add(c.click,BorderLayout.CENTER);
也许有些Java实现(平台、版本)的BorderLayout不喜欢未指定的位置。对我来说似乎还可以。也许要确保您正在EDT的上下文中创建和显示UI。请参阅了解更多详细信息。这也适用于我。我建议您在CPSFrame非静态代码中创建GUI,而不要在static main方法中构建它。相反,在main方法中,只需创建CPSFrame对象,将其缠绕并让其运行。首先,我不理解您使用无关的代码块(例如大括号之间的代码)-例如,“settings.add(times);”和“settings.add(showCPS);”不需要与其他代码分开。第二,我看不到您在哪里向“单击”按钮添加操作侦听器。我还没有为按钮添加操作侦听器。这些无关的模块是我在计算机科学课上学习的,它不会影响代码的编译方式。您指出的这两件事都不会影响
时间
和showCPS
的渲染。根据BorderLayout API,以默认方式添加到BorderLayout(无第二个参数常量)会自动放置组件BorderLayout.CENTER。这不是version、L&F或platform dependent.hmm,在添加BorderLayout.CENTER并将帧代码移出main方法后仍然存在相同的问题。我已经用更多的信息更新了原来的帖子。