我有两个jframes
,
我想从另一个jframe
打开其他已打开的jframe
获取价值。
当点击显示jframe1
的{{1}} open
按钮并在文本字段中输入一些文字并点击jframe2
按钮时,文字字段值希望获得ok
{{1} }。如何做到这一点,我试过,但我找不到办法做到这一点。
这可能吗?
答案 0 :(得分:3)
使用回调
将此代码添加到您的项目中:
public interface ICallbackListener{
void onNewEvent(String msg);
}
private ICallbackListener myListener;
public void addCallback(ICallbackListener myListener){
this.myListener = myListener;
}
...
if(myListener!=null){
myListener.onNewEvent("myMessage");
}
...
private ICallbackListener myListener;
ICallbackListener i = new ICallbackListener() {
@Override
public void onNewEvent(String msg) {
// TODO Auto-generated method stub
}
};
public void setCallback( ){
jframe2.addCallback(myListener);
}
现在,jframe2每次调用接口方法都会异步调用jframe1中的TODO标签
答案 1 :(得分:2)
试试这个
import java.awt.FlowLayout;
import javax.swing.*;
import java.awt.event.*;
class TestFrameExample extends JFrame implements ActionListener{
static JLabel label ;
public static TestFrameExample test;
TestFrameExample()
{
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
label = new JLabel("This is a label!");
JButton button = new JButton("Open");
button.setText("Press me");
button.addActionListener(this);
panel.add(label);
panel.add(button);
add(panel);
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent a)
{
new TestFrameExample1();
}
public static void main(String s[]) {
test=new TestFrameExample();
}
}
class TestFrameExample1 extends JFrame implements ActionListener {
JTextField t;
TestFrameExample test;
public TestFrameExample1()
{
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(null);
t=new JTextField();
t.setBounds(100,20,150,20);
JButton button=new JButton("oK");
button.setBounds(100,50,100,30);
button.addActionListener(this);
add(t);
add(button);
}
public void actionPerformed(ActionEvent a)
{
test.label.setText(t.getText());
}
}
答案 2 :(得分:0)
创建一个在jframe2中获取jframe1的方法 在打开按钮动作事件中,从jframe2创建一个对象,并调用该方法,该方法采用jframe1。
所以当你点击jframe2中的Ok按钮时,通过methdo将该文本字段值传递给jframe1对象(你传递给jframe2)
public class jframe1 {
public void actionPerformed(ActionEvent a){
jfame2 jf2 = new jframe2();
jf2.setJframe1(this);
}
public void updateLable(String value){
lblIdk.setText(value);
}
}
public class jframe2 {
private jframe1 jf1;
public void setJframe1(jframe1 jf1){
this.jf1 = jf1;
}
public void actionPerformed(ActionEvent a){
this.jf1.updateLable(txtidk.getText());
}
}