java复选框如何显示在文本雨_java – 在复选框的itemStatechanged事件上显示文本字段...

如何在Swing中的复选框的itemStatechanged事件中显示文本字段?

我正在尝试使用复选框和文本字段创建框架.我希望仅在选中复选框时才显示文本字段.因此,当我初始化组件时,我将textfield.setvisible设置为false,并且为复选框添加了addItemListener并调用了itemStateChanged事件,并且选中了复选框,我将setVisible方法设置为true.

我的SSCCE看起来像:

package ui;

public class Evaluator extends javax.swing.JFrame {

public Evaluator() {

initComponents();

}

private void initComponents() {

jCheckBox1 = new javax.swing.JCheckBox();

jTextField1 = new javax.swing.JTextField();

jTextField1.setVisible(false);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setPreferredSize(new java.awt.Dimension(800, 800));

jCheckBox1.setFont(new java.awt.Font("Tahoma", 0, 14));

jCheckBox1.setText("Properties");

jCheckBox1.addItemListener(new java.awt.event.ItemListener() {

public void itemStateChanged(java.awt.event.ItemEvent evt) {

jCheckBox1ItemStateChanged(evt);

}

});

jTextField1.setFont(new java.awt.Font("Tahoma", 0, 14));

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(jCheckBox1)

.addGap(41, 41, 41)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(155, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addContainerGap(229, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jCheckBox1)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(34, 34, 34))

);

pack();

}

private void jCheckBox1ItemStateChanged(java.awt.event.ItemEvent evt) {

// TODO add your handling code here:

if(evt.getStateChange()== java.awt.event.ItemEvent.SELECTED){

jTextField1.setVisible(true);

}

}

public static void main(String args[]) {

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(Evaluator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(Evaluator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(Evaluator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(Evaluator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

}

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new Evaluator().setVisible(true);

}

});

}

private javax.swing.JCheckBox jCheckBox1;

private javax.swing.JTextField jTextField1;

}

解决方法:

基本上,您需要使框架(或父容器)无效以强制它重新布局

private void jCheckBox2ItemStateChanged(java.awt.event.ItemEvent evt) {

jTextField1.setVisible(jCheckBox2.isSelected());

invalidate();

validate();

}

更新

我还建议您避免将整个UI添加到顶级容器中,而是使用JPanel作为基础组件并围绕它们构建UI.准备好后,只需将基本面板添加到您需要的顶级容器中.

标签:jcheckbox,java,swing,jtextfield,visibility

来源: https://codeday.me/bug/20190723/1509445.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值