2

JFrame大量のデータと簡単にやり取りするためのインターフェイスに取り組んでいます。データは .txt ファイルに保存され、.txtファイルから名前が選択されるJListと、プログラムは適切なデータ行を読み取り、定義したオブジェクト (CounterParty) に変換し、オブジェクトの適切なフィールドをJLabel秒。これはすべてうまくいきます。JPanel選択したオブジェクトを編集する new を起動するコードも作成しました。JPanelが開き、既にデータが取り込まれています。ボタンをクリックすると、.txt ファイルの既存の情報が削除され、新しく編集されたデータに置き換えられます。これもうまくいきます。

ただし、これをもう少し使いやすくしたいと思います。[編集] ボタンをクリックすると、情報が最初に表示される s が、 jLa ​​bels からのデータが入力された sJLabelに変換されます。これにより、新しい JPanel ウィンドウを完全に起動する必要がなくなります。の可視性を false に変更し、新しいオブジェクトを作成すると思います。私はこれに問題があります。オブジェクトをsに変換できますか? 両方のオブジェクトをまったく同じ場所に置くことはできますか? どうすればいいのかわかりません。JTextFieldJLabelJTextField
JLabelJTextField

NetBeans を使用しています。

ご協力ありがとうございました!追加情報が必要な場合はお知らせください。

4

2 に答える 2

2

これはそれを行う1つの方法です:
それJLabelがあなたlabeltextfieldあなたのJTextField

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

これにより、のテキストでが作成されますJLabel。専用のに配置
する必要があるので、を削除して、に置き換えてから/JLabelJPanelJLabelJTextFieldrepaint()revalidate()

于 2012-07-27T20:36:12.477 に答える
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;
                }
            }
        });
    }
}
于 2012-07-27T20:43:12.073 に答える