帧中面板中的文本字段最初设置为不可见;稍后程序将其设置为可见但不显示

时间:2013-10-24 03:02:47

标签: java swing gui-builder

txDiv0中的文本应该在分割为0时显示。它最初设置为不可见。代码正常工作但是当我单击框架边框时,仅显示文本,就像使其变大一样。使框架字面上高一个像素会使该字段显示出来。

GUIbuilder生成的代码:

    private javax.swing.JTextField txDiv0;
...
    txDiv0 = new javax.swing.JTextField();
...
    txDiv0.setText("Division by 0 is undefined");  
...
    javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
    jPanel6.setLayout(jPanel6Layout);
    jPanel6Layout.setHorizontalGroup(
      jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(txDiv0, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap())
    );
    jPanel6Layout.setVerticalGroup(
      jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
        .addGap(0, 11, Short.MAX_VALUE)
        .addComponent(txDiv0, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
    );
...    
    pack();

以下是我试图让它出现的方式:

    txDiv0.setVisible(true);
    System.out.println();

(println在那里向我展示代码DID的执行。)

除非我几乎摆不到框架的边缘,否则文本区域不会显示。

1 个答案:

答案 0 :(得分:3)

在更改其可见性后,您需要在包含txDiv0组件的容器上调用revalidate()然后repaint()。原因是:

  • revalidate()告诉组件让布局管理器重新布局它包含的组件。此布局将级联当前容器所包含的组件的所有布局管理器。
  • repaint()向JVM建议容器可能有一些脏区域,需要在组件被移除,添加或移动后重新绘制。

顺便说一句,我强烈建议您在学习GUI库时将GUI构建器放在一边,而是尝试手动创建和修改GUI,这样可以让您更好地理解GUI的基础知识。 GUI库,将迫使您更多地阅读和学习教程。