java - JTextField 在鼠标悬停之前不可见
问题描述
我正在尝试用 Java 制作一个简单的计算器程序。但是,当我添加一个JTextField
时,它使所有按钮和字段本身不可见,直到我将鼠标悬停在它上面。如果我注释掉文本字段,一切都会恢复正常,并且所有按钮都可见。
这是我的代码:
import java.awt.*;
import javax.swing.*;
public class Calculator extends JFrame {
// Numbers
JButton btn_zero;
JButton btn_one;
JButton btn_two;
JButton btn_three;
JButton btn_four;
JButton btn_five;
JButton btn_six;
JButton btn_seven;
JButton btn_eight;
JButton btn_nine;
// Operators
JButton btn_add;
JButton btn_subtract;
JButton btn_multiply;
JButton btn_divide;
JButton btn_equals;
JButton btn_decimal;
JButton btn_pm;
JButton btn_clear;
// Panel
JPanel buttonPanel;
// Dimensions
final int WIDTH = 340;
final int HEIGHT = 500;
public Calculator() {
// Characteristics of frame
super("Calculator");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Insets frameInsets = getInsets();
int frameWidth = WIDTH + (frameInsets.left + frameInsets.right);
int frameHeight = HEIGHT + (frameInsets.top + frameInsets.bottom);
setPreferredSize(new Dimension(frameWidth, frameHeight));
//setLayout(null);
pack();
setVisible(true);
// Add values to all buttons
btn_zero = new JButton("0");
btn_one = new JButton("1");
btn_two = new JButton("2");
btn_three = new JButton("3");
btn_four = new JButton("4");
btn_five = new JButton("5");
btn_six = new JButton("6");
btn_seven = new JButton("7");
btn_eight = new JButton("8");
btn_nine = new JButton("9");
btn_add = new JButton("+");
btn_subtract = new JButton("-");
btn_multiply = new JButton("×");
btn_divide = new JButton("÷");
btn_equals = new JButton("=");
btn_decimal = new JButton(".");
btn_pm = new JButton("±");
btn_clear = new JButton("C");
// Adds the panel
buttonPanel = new JPanel();
buttonPanel.setSize(new Dimension(frameWidth, frameHeight));
buttonPanel.setLayout(null);
// Textfield
JTextField AnswerBox = new JTextField ("");
AnswerBox.setBounds(0, 0, 320, 70);
buttonPanel.add(AnswerBox);
//Buttons
btn_decimal.setBounds(70, 100, 50, 50);
buttonPanel.add(btn_decimal);
btn_pm.setBounds(130, 100, 50, 50);
buttonPanel.add(btn_pm);
btn_clear.setBounds(190, 100, 50, 50);
buttonPanel.add(btn_clear);
btn_add.setBounds(250, 100, 50, 50);
buttonPanel.add(btn_add);
btn_subtract.setBounds(250, 160, 50, 50);
buttonPanel.add(btn_subtract);
btn_multiply.setBounds(250, 220, 50, 50);
buttonPanel.add(btn_multiply);
btn_divide.setBounds(250, 280, 50, 50);
buttonPanel.add(btn_divide);
btn_equals.setBounds(10, 350, 290, 50);
buttonPanel.add(btn_equals);
btn_zero.setBounds(190, 160, 50, 170);
buttonPanel.add(btn_zero);
btn_one.setBounds(10, 160, 50, 50);
buttonPanel.add(btn_one);
btn_two.setBounds(70, 160 , 50, 50);
buttonPanel.add(btn_two);
btn_three.setBounds(130, 160, 50, 50);
buttonPanel.add(btn_three);
btn_four.setBounds(10, 220, 50, 50);
buttonPanel.add(btn_four);
btn_five.setBounds(70, 220, 50, 50);
buttonPanel.add(btn_five);
btn_six.setBounds(130, 220, 50, 50);
buttonPanel.add(btn_six);
btn_seven.setBounds(10, 280, 50, 50);
buttonPanel.add(btn_seven);
btn_eight.setBounds(70, 280, 50, 50);
buttonPanel.add(btn_eight);
btn_nine.setBounds(130, 280, 50, 50);
buttonPanel.add(btn_nine);
buttonPanel.setVisible(true);
add(buttonPanel);
}
}
此外,代码现在也只是显示计算器的按钮,实际上并没有做任何事情,因为我想专注于修复这个错误。
解决方案
添加所有小部件以重新计算容器的布局后调用revalidate()
(在您的情况下为 a JFrame
):
buttonPanel.setVisible(true);
add(buttonPanel);
revalidate();
推荐阅读
- java - 带有 JPA 事务的 JAX-WS Web 服务
- javascript - 使用 Gmail API NodeJS 授权错误列出消息
- javascript - 当浏览器操作在地址栏中不可见时,Microsoft Edge 扩展未在上下文菜单中显示图标
- spring-boot - 带有注释和缓存的 Spring Batch
- vba - 将最后一个 excel 工作表作为第一个工作表导入到另一个工作簿
- java - 在删除之前从 ConcurrentHashMap 中窃取引用。正确性
- c# - 使用 c# 在属性级别读取带有名称空间的 XML
- ios - wifi不存在时NEHotspotConfigurationManager报错问题
- php - 从字符串中删除所有数字,除非它们遵循 PHP 中的某个字符
- c - 警告:尽管包含标头,但数据定义没有类型或存储类