【问题标题】:Hide/Show JTextField隐藏/显示 JTextField
【发布时间】:2014-01-04 14:53:16
【问题描述】:

我有一个 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

【问题讨论】:

  • 添加一个 actionListener 可能会有所帮助。
  • 您希望它在点击时出现,还是只想启用它?如果要启用它,请在开头使用setEnabled(flase),然后在单击时使用setEnabled(true)。否则,您需要重新绘制。
  • @ambigram_maker 我需要它看起来不能启用..
  • 好吧,在这种情况下,请检查以下答案。

标签: java swing jtextfield


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您是否尝试过在将文本字段设置为可见后使用textField.revalidate()textField.repaint()

    【讨论】:

    • 啊,当然,忘了需要在容器而不是组件本身上调用它!
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2010-11-20
    • 2011-02-22
    • 2012-04-15
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多