java - 隐藏/显示 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 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);
    }
}

这个想法是:
当用户单击要在 JList 上编辑的值时,必须出现 JTextField

最佳答案

textField.setVisible(true);之后您需要调用revalidate()repaint()包含您的 JTextField 的容器的方法,如果您尝试显示/隐藏可见容器的组件。

因此,只需将下一行添加到您的代码中,一切都会正常工作:

 EditCourse.this.revalidate();
 EditCourse.this.repaint();

关于java - 隐藏/显示 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922442/

相关文章:

java - Datanucleus jdoql 组通过具有 avg()

java - 如何在受限沙箱中运行Java程序

java - 在 Java Swing 的屏幕中心对齐 GroupLayout?

Java - 如何使用 OverlayLayout LayoutManager 将 Canvas 放在彼此之上?

java - 让我的 GUI 从类创建实例并将该信息拉入文本区域

JavaFX KeyEvent 传播顺序

java - 使用 FragmentStatePagerAdapter 更改方向后, fragment View 为空

swing - documentFilter.insert 从未被调用

java - 限制 JTextField 中的输入长度不起作用

java - GUI 类(JTextField-JTextArea)