0

仮想キーボードモジュールを開発しています。

KeyBoardModule.java

KeyBoardModule kbm = new KeyBoardModule("small", false, null);

OtherjForm(MainFrame.java)が textbox の clickevent である場合に呼び出されJFrame、キーボード (ポップアップ ウィンドウのようなもの) で新しくなります。Enter キーを押すと、 ofからJButton変数にデータが保存されます。よりもtextFieldValuetextareaKeyBoardModuleframe.disponse()

キーボードをクリックするとメインクラスが呼び出さMainFrameれ、メインフレームが呼び出され、キーボードからメインフレームに値を返す必要があります..

メインフレームでアクションリスナー(Enterボタン用)を使用せずに

4

1 に答える 1

1

GUI1から別のGUI2に直接値を返すには、GUI1にGUI2のオブジェクトへの参照が必要です。そのため、GUI1からGUI2にメッセージを渡したいときはいつでも、GUI2の適切なメソッドを呼び出すことでそれを行うことができます。たとえば、以下のコードについて考えてみます。InputBoardinのオブジェクトを作成している間MainFrame、の現在のオブジェクトMainFrameInputBoard'sコンストラクターに渡します。これにより、の適切なメソッドを使用InputBoardして入力を渡すことができます。ここでボタンをクリックするとフレームが開きます。そして、いくつかの入力がに渡されるときはいつでも、それはのに反映されます。MainFrame GUIpublicMainFrameMainFrameInputBoardJTextFieldInputBoardJTextAreaMainFrame

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;

class MainFrame extends JFrame implements ActionListener
{
    private JButton button;
    private JTextArea tArea;
    private InputBoard inBoard;
    public void prepareAndShowGUI()
    {
        setTitle("Main Frame");
        tArea = new JTextArea(10,30);
        button = new JButton("Click Me");
        inBoard = new InputBoard(this);
        inBoard.prepareGUI();
        JScrollPane tFieldPane = new JScrollPane(tArea);
        tArea.setLineWrap(true);
        tArea.setWrapStyleWord(true);
        tArea.setEditable(false);
        button.addActionListener(this);
        getContentPane().add(tFieldPane);
        getContentPane().add(button,BorderLayout.SOUTH);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        button.requestFocus();
    }
    @Override
    public void actionPerformed(ActionEvent evt)
    {
        if (!inBoard.isVisible())
        {
            inBoard.setVisible(true);
        }
        inBoard.toFront();
    }
    public void setText(final String s)
    {
        tArea.setText(s);
    }
    public static void main(String[] st)
    {
        SwingUtilities.invokeLater( new Runnable()
        {
            @Override
            public void run()
            {
                MainFrame mf = new MainFrame();
                mf.prepareAndShowGUI();
            }
        });
    }
}
class InputBoard extends JFrame implements DocumentListener
{
    MainFrame mainFrame ;
    JTextField inField;
    public InputBoard(MainFrame mainFrame)
    {
        this.mainFrame = mainFrame;
    }
    public void prepareGUI()
    {
        setTitle("Input Board");
        inField = new JTextField(40);
        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(inField);
        inField.getDocument().addDocumentListener(this);
        setLocationRelativeTo(mainFrame);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        pack();
    }
    @Override
    public void changedUpdate(DocumentEvent evt)
    {
        mainFrame.setText(inField.getText());
    }
    @Override
    public void insertUpdate(DocumentEvent evt)
    {
        mainFrame.setText(inField.getText());
    }
    @Override
    public void removeUpdate(DocumentEvent evt)
    {
        mainFrame.setText(inField.getText());
    }
}
于 2013-02-22T18:13:37.903 に答える