java jtextfield设置不可见,隐藏/显示JTextField

I have a JTextField that in the begin it have to be hidden and in a specific situation it have to show.

This is my code:

package StudentNotes;

import java.awt.BorderLayout;

public class EditCourse extends JDialog {

private JTextField textField;

/**

* Create the dialog.

*/

public EditCourse(JDialog mainFrame, final StudApp studAppObj) {

super(mainFrame, ModalityType.APPLICATION_MODAL);

setPreferredSize(new Dimension(330, 200));

setTitle("Edit course");

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

setAlwaysOnTop(true);

ArrayList listCourses = studAppObj.getCorsi();

listCourses.toArray();

String[] listData = { "one", "two", "three", "four",

"five", "six", "seven" };

final JList list = new JList(listData);

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

@Override

public void valueChanged(ListSelectionEvent e) {

if (e.getValueIsAdjusting() == true) {

textField.setVisible(true); // it does not show (why?)

}

}

});

JScrollPane scrollPane = new JScrollPane(list);

scrollPane.setSize(new Dimension(118, 40));

textField = new JTextField();

textField.setVisible(false); // it is invisible (OK)

textField.setColumns(10);

GroupLayout groupLayout = new GroupLayout(getContentPane());

groupLayout.setHorizontalGroup(

groupLayout.createParallelGroup(Alignment.LEADING)

.addGroup(groupLayout.createSequentialGroup()

.addGap(108)

.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)

.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 108, GroupLayout.PREFERRED_SIZE))

.addContainerGap(108, Short.MAX_VALUE))

);

groupLayout.setVerticalGroup(

groupLayout.createParallelGroup(Alignment.LEADING)

.addGroup(groupLayout.createSequentialGroup()

.addGap(21)

.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 64, GroupLayout.PREFERRED_SIZE)

.addGap(18)

.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addContainerGap(49, Short.MAX_VALUE))

);

getContentPane().setLayout(groupLayout);

pack();

setLocationRelativeTo(null);

setResizable(false);

setVisible(true);

}

}

the idea is:

when the user click a value to edit on the JList, the JTextField have to appear

解决方案

After textField.setVisible(true); you need to call revalidate() and repaint() methods of container which contains your JTextField, if you try to show/hide components of visible container.

So just add next lines to your code and all will be work:

EditCourse.this.revalidate();

EditCourse.this.repaint();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值