我正在使用JFrame
界面轻松与大量数据进行交互。数据保存在 .txt 文件中,当从JList
中选择名称时,我的程序会读取相应的数据行,将它们转换为我定义的对象( CounterParty),并在JLabel
s中显示对象的相应字段。这一切都运作良好。我还编写了代码来启动编辑所选对象的新JPanel
。 JPanel
打开,已填充数据,单击按钮时, .txt 文件中的现有信息将被删除,并替换为新编辑的数据。这也很有效。
但是,我想让它更加用户友好。我希望最初显示信息的JLabel
转换为JTextField
,当点击编辑按钮时,该JLabel
将填充jLabel中的数据。这将删除需要完全启动新的JPanel窗口。我假设是会将JTextField
的可见性更改为false并创建新的JLabel
对象。我遇到了这个麻烦。
JTextField
个对象可以转换为{{1}}个吗?我可以将两个对象放在完全相同的位置,但可以看到备用可见性吗?我不知道该怎么做。
我正在使用NetBeans。
感谢您的帮助!如果需要任何其他信息,请与我们联系。
答案 0 :(得分:2)
这是一种方法:
假设JLabel
是您的label
而textfield
是JTextField
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;
}
}
});
}
}