1

frameいくつかを含むJavaでを作成しましtextfields and buttonsた。ユーザーがより多くのテキストフィールド(たとえば、データを追加するため)を必要としていると仮定して、を配置しbutton、ユーザーがクリックするthe buttonと、新しいものtextfieldが表示されるはずです。次に、ユーザーはデータを入力し、クリックしてbutton別のデータtextfieldが表示されるようにします。これどうやってするの ?ボタンをクリックしてテキストフィールドをどんどん表示するには、ボタンにどのようなコードを書く必要がありますか?ありがとうございました !

4

2 に答える 2

3

コンポーネントを にJFrame直接追加するのではなく、 に追加することをお勧めしますJPanel。あなたの問題に関連していますが、この小さな例を見てください。うまくいけば、ヒントを与えることができるかもしれません。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFrameExample
{   
    private JFrame frame;
    private JButton button;
    private JTextField tfield;
    private String nameTField;
    private int count;

    public JFrameExample()
    {
        nameTField = "tField";
        count = 0;
    }

    private void displayGUI()
    {
        frame = new JFrame("JFrame Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(0, 1, 2, 2));
        button = new JButton("Add JTextField");
        button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                tfield = new JTextField();
                tfield.setName(nameTField + count);
                count++;
                frame.add(tfield);
                frame.revalidate();  // For JDK 1.7 or above.
                //frame.getContentPane().revalidate(); // For JDK 1.6 or below.
                frame.repaint();
            }
        });
        frame.add(button);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new JFrameExample().displayGUI();
            }
        });
    }
}
于 2012-09-04T01:26:35.497 に答える
2

と呼ばれるメイン コンテナと、すでに に追加されてpanelいるボタン変数があると仮定すると、次のことができます。buttonpanel

// handle the button action event
button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // create the new text field
    JTextField newTextField = new JTextField();
    // add it to the container
    panel.add(newTextField);
    panel.validate();
    panel.repaint();
  }
});

新しいテキスト フィールドを追加する場合、使用しているレイアウト マネージャーによっては、レイアウト関連の特性について言及する必要がある場合があります (たとえば、 を使用している場合GridBagLayoutは、制約を指定する必要があります)。

于 2012-09-03T16:58:50.063 に答える