Java - setVisible 仅在点击屏幕后有效

Java - setVisible only works after clicking on screen

我有一个带有 jcheckbox 和 jtextfield 的 jframe(它有更多组件)。

我将标签设置为 setVisible(false),选中该复选框后,标签应该可见。它确实如此,但您只能在单击框架上的其他任何地方之前看不到它。

下面是部分代码:

jTextField17 = new javax.swing.JTextField();
jTextField17.setText("Quantas?");
jTextField17.setVisible(false);
jTextField17.setMinimumSize(new java.awt.Dimension(52, 20));


jCheckBox1 = new javax.swing.JCheckBox();
jCheckBox1.setBackground(new java.awt.Color(153, 255, 153));
jCheckBox1.setText("Cabecinhas");
jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    jCheckBox1ActionPerformed(evt);
   }
});


private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (jCheckBox1.isSelected()){
        jTextField17.setVisible(true);
    }else{
        jTextField17.setVisible(false);
    }
}                                       

我认为代码没有任何问题。

总结一下:

用户点击复选框。复选框被标记,似乎没有其他事情发生。用户单击屏幕上的任意位置(选中复选框后),然后出现文本字段。

我正在使用 netbeans GUI 编辑器。我想展示整个代码,但它有 3000 多行。如果你需要看更多,问我你需要什么部分,我会在这里编辑。感谢您阅读本文,更感谢您的帮助。

需要重绘才能成功,否则等到重绘完成

private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (jCheckBox1.isSelected()){
        jTextField17.setVisible(true);
        jTextField17.repaint();
    }else{
        jTextField17.setVisible(false);
    }
}    

如果您最初不将文本字段的 setVisible 方法设置为 false,则可以解决此问题。

尝试使用 this.repaint();this.revalidate();

private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (jCheckBox1.isSelected()){
        jTextField17.setVisible(true);
        this.repaint();
        this.revalidate();

    }else{
        jTextField17.setVisible(false);
    }
}