最近在学习swing,可视化界面开发。用的是myeclipse 10的matisse4插件。我有个主窗体和一个子窗体。
通过点击主窗体的按钮来打开子窗体,子窗体中获取当前时间。点击子窗体确定后把值传到主窗体的JTextArea中。隐藏子窗体。研究了好几天了没弄出来。请教做过的朋友帮忙给个例子。实在是困扰好久了。
通过点击主窗体的按钮来打开子窗体,子窗体中获取当前时间。点击子窗体确定后把值传到主窗体的JTextArea中。隐藏子窗体。研究了好几天了没弄出来。请教做过的朋友帮忙给个例子。实在是困扰好久了。
public static MainJFrame main = null; //主窗口 static {
main = new MainJFrame (); //打开主窗口 ,主窗口中有个JTextArea组件,比如说叫text
//监听主窗口中的事件,点击主窗口中的按钮后打开子窗口。
//比如说打开的子窗口是 ChildJFrame
//在ChildJFrame获取当前时间,然后执行下面的代码,给主窗口中的JTextArea赋值
MainClass.main.text.setText(new Date().toLocalString());
}}
package com.zf.ui;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;/**
* 主窗口
* @author zhoufeng
*
*/
public class MainFrame { JFrame frame = null ;
JTextArea text = null;
JButton button = null;
public void init(){
frame = new JFrame("主窗口");
frame.setBounds(500, 250, 500, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text = new JTextArea();
text.setSize(100, 50 );
text.setText("这里将会显示时间!");
frame.add(text , BorderLayout.NORTH);
button = new JButton("打开子窗口");
frame.add(button , BorderLayout.SOUTH);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了。");
new ChildFrame();
}
});
}
public static void main(String[] args) {
new MainFrame().init();
}
/**
* 子窗口
* @author zhoufeng
*
*/
class ChildFrame{
JFrame frame = null;
JButton button = null;
public ChildFrame(){
frame = new JFrame("子窗口");
frame.setBounds(500, 250, 300, 150);
frame.setVisible(true);
button = new JButton("为主窗口中的文本域赋值");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MainFrame.this.text.setText(new Date().toLocaleString());
frame.setVisible(false);
}
});
frame.add(button , BorderLayout.NORTH);
}
}
}
import javax.swing.JTextField;public class TestFrame extends Frame implements ActionListener {
TestFrame parent;
Button createFrame = new Button("产生新窗体");
Button returnValue = new Button("参数回传");
JTextField time = new JTextField(); public TestFrame(String title, TestFrame parent) {
this.setTitle(title);
this.parent = parent;
initFrame();
} private void initFrame(){
this.add(time,BorderLayout.NORTH);
if (this.parent == null) {
this.add(createFrame);
createFrame.addActionListener(this);
} else {
this.add(returnValue);
returnValue.addActionListener(this);
}
this.pack();
this.setVisible(true);
} @Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == createFrame) {
TestFrame f = new TestFrame("新窗体",this);
f.time.setText(new Date()+ "");
}
else if(e.getSource()== returnValue){
parent.time.setText(this.time.getText());
this.dispose();
}
}
public static void main(String args[]){
new TestFrame("主窗体",null);
}
}
String timeOneStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(this.jSpinner1.getValue());
String timeTwoStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(this.jSpinner2.getValue());
LoginFrame lf=new LoginFrame(); //主窗体
lf.getjTextArea1().append(timeOneStr); //主窗体的jtextArea出不来数据。
//this.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == createFrame) {
TestFrame f = new TestFrame("新窗体",this);
f.time.setText(new Date()+ "");
}
else if(e.getSource()== returnValue){
parent.time.setText(this.time.getText());
this.dispose();
}
}
这一段跟你的有什么不同。
你告诉下我在第二个窗体中如何调用第一个窗体的控件属性来赋值?
package com.zf.ui;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;/**
* 主窗口
* @author zhoufeng
*
*/
public class MainFrame { JFrame frame = null ;
JTextArea text = null;
JButton button = null; public void init(){
frame = new JFrame("主窗口");
frame.setBounds(500, 250, 500, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); text = new JTextArea();
text.setSize(100, 50 );
text.setText("这里将会显示时间!");
frame.add(text , BorderLayout.NORTH); button = new JButton("打开子窗口"); frame.add(button , BorderLayout.SOUTH); button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了。");
new ChildFrame(MainFrame.this);
}
});
} public static void main(String[] args) {
new MainFrame().init();
}
}
/**
* 子窗口
* @author zhoufeng
*
*/
class ChildFrame{
MainFrame mainFrame = null;
JFrame frame = null;
JButton button = null;
public ChildFrame(final MainFrame mainFrame){
frame = new JFrame("子窗口");
frame.setBounds(500, 250, 300, 150);
frame.setVisible(true);
button = new JButton("为主窗口中的文本域赋值");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mainFrame.text.setText(new Date().toLocaleString());
frame.setVisible(false);
}
});
frame.add(button , BorderLayout.NORTH);
}}
效果出来了。看来这个是要在new第二个窗体的时候通过构造函数把第一个窗体传过去。这样才能使用。
打扰了这么久还是谢谢你了。
也谢谢:sdojqy1122
感谢两位的指点。