我正在开发一个虚拟键盘模块。
KeyBoardModule.java
KeyBoardModule kbm = new KeyBoardModule("small", false, null);
在其他jForm(MainFrame.java)
中是文本框上的clickevent时调用
然后我用键盘得到新的 JFrame
(它就像弹出窗口),
当按下 JButton
Enter 时,它会将数据从 KeyBoardModule
的 textarea
保存到变量 textFieldValue
中。
比frame.disponse()
主类调用MainFrame
并在单击键盘时调用大型机,我需要将值从键盘返回到大型机..
在主机中不使用 Action 监听器(用于输入按钮)
最佳答案
要将值直接从 GUI1 返回到另一个 GUI2 ,GUI1 必须具有对 GUI2 对象的引用。因此,每当您想要将任何消息从 GUI1 传递到 GUI2 时,您都可以通过调用 GUI2 的适当方法来完成。例如,考虑下面给出的代码。创建InputBoard
对象时在MainFrame
我们传递MainFrame
的当前对象至InputBoard's
构造函数使得 InputBoard
可以将其输入传递给 MainFrame
GUI
使用适当的public
方法MainFrame
。这里MainFrame
打开InputBoard
单击按钮时的框架。每当某些输入传递到 JTextField
在InputBoard
它反射(reflect)在 JTextArea
中的MainFrame
.
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());
}
}
关于java - 单击时调用对象并等待处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029409/