0

我正在开发一个虚拟键盘模块。

键盘模块.java

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

当在其他jForm(MainFrame.java)是文本框上的点击事件时被调用,然后我JFrame用键盘获得新的(它就像弹出窗口),当按下输入时,它将数据保存到来自的JButton变量。比textFieldValuetextareaKeyBoardModuleframe.disponse()

MainFrame单击键盘时主类调用和大型机调用,我需要将值从键盘返回到大型机..

在大型机中不使用 actionlistener(用于输入按钮)

4

1 回答 1

1

要将值直接从 GUI1 返回到另一个 GUI2,GUI1 必须具有对 GUI2 对象的引用。因此,每当您想将任何消息从 GUI1 传递到 GUI2 时,您都可以通过调用 GUI2 的适当方法来实现。例如考虑下面给出的代码。在创建 in 的对象时InputBoardMainFrame我们将当前对象传递MainFrameInputBoard's构造函数,以便可以使用适当的方法InputBoard将其输入传递给。在这里单击按钮打开框架。并且无论何时将某些输入传递给in ,它都会反映在of 中。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 回答