将jLabel转换为jTextField

时间:2012-07-27 20:23:48

标签: netbeans visibility jlabel jtextfield

我正在使用JFrame界面轻松与大量数据进行交互。数据保存在 .txt 文件中,当从JList中选择名称时,我的程序会读取相应的数据行,将它们转换为我定义的对象( CounterParty),并在JLabel s中显示对象的相应字段。这一切都运作良好。我还编写了代码来启动编辑所选对象的新JPanelJPanel打开,已填充数据,单击按钮时, .txt 文件中的现有信息将被删除,并替换为新编辑的数据。这也很有效。

但是,我想让它更加用户友好。我希望最初显示信息的JLabel转换为JTextField,当点击编辑按钮时,该JLabel将填充jLabel中的数据。这将删除需要完全启动新的JPanel窗口。我假设是会将JTextField的可见性更改为false并创建新的JLabel对象。我遇到了这个麻烦。
JTextField个对象可以转换为{{1}}个吗?我可以将两个对象放在完全相同的位置,但可以看到备用可见性吗?我不知道该怎么做。

我正在使用NetBeans。

感谢您的帮助!如果需要任何其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

这是一种方法:
假设JLabel是您的labeltextfieldJTextField

 textfield = new JTextField(label.getText());

这将使用JLabel的文本创建一个 您应该将JLabel放在专用的JPanel中,然后从中移除JLabel并将其替换为JTextField,然后repaint() / {{1 }}

答案 1 :(得分:1)

我创建了一个小例子,我认为它可以展示你想要的东西。它使用一个按钮,按下该按钮将移除JTextField并添加JLabel,反之亦然,然后它会调用revalidate()repaint()来显示对框架的更改每个按钮点击:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JLabelToJTextField extends JFrame {

    JLabel jLabel;
    JTextField jTextField;
    JButton jButton;
    JPanel mainPanel;

    public JLabelToJTextField() {
        jLabel = new JLabel("Name");
        jTextField = new JTextField(15);
        jButton = new JButton("Edit");
        mainPanel = new JPanel(new BorderLayout());

        createUI();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JLabelToJTextField().setVisible(true);
            }
        });
    }

    private void createUI() {
        setTitle("JLabel to JtextField");
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addComponentsToPanel();
        setLocationRelativeTo(null);
        pack();

    }

    private void addComponentsToPanel() {
        mainPanel.add(jLabel, BorderLayout.CENTER);
        mainPanel.add(jButton, BorderLayout.SOUTH);
        addActionListeners();
        getContentPane().add(mainPanel);
    }

    private void addActionListeners() {
        jButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                switch (jButton.getText()) {
                    case "Edit":
                        mainPanel.remove(jLabel);//remove component
                        mainPanel.add(jTextField, BorderLayout.CENTER);//add new component
                        jButton.setText("Done");
                        //refresh JFrame
                        revalidate();
                        repaint();

                        break;
                    case "Done":
                        mainPanel.remove(jTextField);//remove component
                        mainPanel.add(jLabel, BorderLayout.CENTER);//add new component
                        jButton.setText("Edit");//set button text to original
                        //refresh JFrame
                        revalidate();
                        repaint();
                        break;
                }
            }
        });
    }
}