gpt4 book ai didi

netbeans - 将 jLabel 转换为 jTextField

转载 作者:行者123 更新时间:2023-12-04 05:37:55 25 4
gpt4 key购买 nike

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

但是,我想让它更加用户友好。我想要 JLabel s 最初显示信息以转换为 JTextField 的位置当单击“编辑”按钮时,用 jLabels 中的数据填充。这将完全不需要启动新的 JPanel 窗口。我假设是将 JLabel 的可见性更改为 false s 并创建新 JTextField对象。我遇到了这个问题。可以 JLabel对象转换为 JTextField ?我可以将两个物体放在完全相同的位置,但可以交替显示吗?我不知道该怎么做。

我正在使用 NetBeans。

感谢您的帮助!如果需要任何其他信息,请告诉我。

最佳答案

我创建了一个小例子,我认为它展示了你想要的。它使用一个按钮,按下该按钮将删除 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;
}
}
});
}
}

关于netbeans - 将 jLabel 转换为 jTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com