Java 隐藏/显示JTextField
我有一个JTextField,它在开始时必须隐藏,在特定情况下必须显示。Java 隐藏/显示JTextField,java,swing,jtextfield,Java,Swing,Jtextfield,我有一个JTextField,它在开始时必须隐藏,在特定情况下必须显示。这是我的代码: package StudentNotes; import java.awt.BorderLayout; public class EditCourse extends JDialog { private JTextField textField; /** * Create the dialog. */ public EditCourse(JDialog mai
这是我的代码:
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<Corso> 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);
}
}
打包学生笔记;
导入java.awt.BorderLayout;
公共类EditCourse扩展JDialog{
私有JTextField textField;
/**
*创建对话框。
*/
公共编辑课程(JDialog大型机,最终StudApp studappbj){
super(大型机,ModalityType.APPLICATION_MODAL);
setPreferredSize(新尺寸(330200));
课程名称(“编辑课程”);
setDefaultCloseOperation(JDialog.DISPOSE\u ON\u CLOSE);
setAlwaysOnTop(真);
ArrayList listCourses=studAppObj.getCorsi();
listCourses.toArray();
String[]listData={“一”、“二”、“三”、“四”,
“五”、“六”、“七”};
最终JList列表=新JList(listData);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.getSelectionModel().addListSelectionListener(新建ListSelectionListener()){
@凌驾
public void值已更改(ListSelectionEvent e){
如果(如getValueIsAdjusting()==true){
textField.setVisible(true);//它不显示(为什么?)
}
}
});
JScrollPane scrollPane=新的JScrollPane(列表);
滚动窗格。设置大小(新尺寸(118,40));
textField=新的JTextField();
textField.setVisible(false);//它不可见(OK)
textField.setColumns(10);
GroupLayout=newgrouplayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(108)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(文本字段、GroupLayout.PREFERRED\u大小、GroupLayout.DEFAULT\u大小、GroupLayout.PREFERRED\u大小)
.addComponent(滚动窗格,GroupLayout.PREFERRED_SIZE,108,GroupLayout.PREFERRED_SIZE))
.addContainerGap(108,简称最大值))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(21)
.addComponent(滚动窗格,GroupLayout.PREFERRED\u大小,64,GroupLayout.PREFERRED\u大小)
.addGap(18)
.addComponent(文本字段、GroupLayout.PREFERRED\u大小、GroupLayout.DEFAULT\u大小、GroupLayout.PREFERRED\u大小)
.addContainerGap(49,简称最大值))
);
getContentPane().setLayout(groupLayout);
包装();
setLocationRelativeTo(空);
可设置大小(假);
setVisible(真);
}
}
想法是:当用户在JList上单击要编辑的值时,JTextField必须出现您是否尝试过在将文本字段设置为可见后使用
textField.revalidate()
,然后再使用textField.repaint()
,textField.setVisible(true)后使用
如果您试图显示/隐藏可见容器的组件,则需要调用包含您的JTextField
的容器的revalidate()
和repaint()
方法
因此,只需在代码中添加下一行代码,即可完成所有工作:
EditCourse.this.revalidate();
EditCourse.this.repaint();
在此处添加actionListener可能会有所帮助。您希望它在单击时显示,还是只想启用它?如果要启用它,请在开头使用setEnabled(flase)
,然后单击setEnabled(true)
。否则,您需要重新绘制。@ambigram\u maker我需要它必须显示为不启用。。那么,在这种情况下,请检查下面的答案。啊,当然,忘了它需要在容器上调用,而不是组件本身!