【问题标题】:Java - setVisible only works after clicking on screenJava - setVisible 仅在单击屏幕后才有效
【发布时间】:2015-11-04 00:31:11
【问题描述】:

我有一个带有 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 多行。如果你需要看更多,问我你需要什么部分,我会在这里编辑。感谢您阅读本文,更感谢您提供帮助。

【问题讨论】:

  • 我现在认为问题出在 netbeans 生成的代码上。我在没有 GUI 的情况下从头开始制作了另一个框架,它可以正常工作。有没有人在 netbeans IDE 上遇到过这个问题?
  • 我使用 netbeans,它不是 netbeans,它是你的代码。我在下面添加了一行的答案。试试看。
  • stackoverflow.com/questions/9882845/… 不错的链接描述了差异

标签: java netbeans ide jframe jcheckbox


【解决方案1】:

尝试使用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);
    }
}          

【讨论】:

  • 工作就像一个魅力!你知道为什么会这样吗?尽管很多人只是在寻找一段代码,但我正在尝试理解 java。
  • 如果有效,您能接受我的回答吗?所以其他人也可以从中受益!
  • @DrNetwork repaint() 方法会尽快调用该组件的paint 方法,否则该方法会尽快调用该组件的update 方法。 Component 的update(Graphics g) 方法调用该组件的paint 方法来重绘该组件。就像刷新屏幕一样……我想!
【解决方案2】:

你需要重新绘制它才能完成,否则它会等到重新绘制。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多