新手求助如何使用 文本框 监听另外一个java文件下的 变量(由于for循环 不断变化)

klmn111aaa 2016-03-01 12:28:04
新手求助:比如说下面这个框架, 文本框TextField tf; 想监听另外一个java文件下的 变量(由于for循环 不断变化,就是让那个变量的数值 不断的变化的显示在 文本框里),应该如何添加?(或者直接在窗体上输出数字就行 不用要文本框 )
还有,由于另外的那个java文件是主函数,肯定要调用这个java文件,这个文件最下面的main函数直接删除么?谢谢

package test;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MouseAndKeyEvent {

public Frame f;
public Button but;
public TextField tf;

public MouseAndKeyEvent() {
init();
}

public void init(){
f=new Frame("me frame");
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());

tf=new TextField(20);
but=new Button("退出");

f.add(tf);
f.add(but);

event();

f.setVisible(true);
}

public void event(){
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}

});

but.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyEvent();
}

}
...全文
218 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
klmn111aaa 2016-03-02
  • 打赏
  • 举报
回复
非常感谢 ,实验了下,发现第二个线程模块的第20行和第24行(20 行 View v = View.getView(); 24行 v.getJt1().setText(timeServer.getTime());)报错如下: 能麻烦问下为什么么 ? Exception in thread "Thread-5" java.lang.Error: Unresolved compilation problems: The method getView(int) in the type View is not applicable for the arguments () The method getJt1() is undefined for the type View at swing.SelectTime.run(SelectTime.java:22) at java.lang.Thread.run(Unknown Source)
引用 10 楼 qq_21992489 的回复:
package swing;

import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeServer extends Thread{

	private static String time;
	
	public static String getTime(){
		
		return time;
	}
	
	public void run(){
		
		while(true){
			
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			time = sdf.format(new Date());
			
			System.out.println(time);
			
		}
		
	}
	
}
这是第一个线程 ,run()中不停地每隔一秒钟取一次时间,你可以在控制台看到时间的变化相当于 你所说的一直在变化的类的属性。
package swing;

import javax.swing.JFrame;

public class SelectTime extends Thread{

	private static View view;
	private static TimeServer timeServer = new TimeServer();

	
	public SelectTime(){
		
		Thread thread1 = new Thread(timeServer);
		thread1.start();
		
	}
	
	public void run(){
		
		View v = View.getView();
		
		while(true){
			
			v.getJt1().setText(timeServer.getTime());
			
		}
	}
	
}
上面是第二个线程 ,run()不停地取得第一个线程中不断变化的时间,并更改 文本框中的值 SelectTime() 在构造器中 开启了第一个线程
package swing;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class View extends JFrame{
	
	private static SelectTime selctTime = new SelectTime();
	private static JTextArea jt1 = new JTextArea();
	private static View view ;
	
	public static View getView(){
		if(view == null){
			view = new View();
		}
		return view;
	}

	public static JTextArea getJt1() {
		return jt1;
	}

	public static void main(String[] args) {
		
		view.getView();
		view.setSize(800,600);
		view.setVisible(true);
		view.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container con = view.getContentPane();
		con.setLayout(new GridLayout(2,1));
		
		JPanel jp1 = new JPanel(new GridLayout(1, 1));
		JPanel jp2 = new JPanel(new GridLayout(1, 1));
		
		JButton jb1 = new JButton("开始计时");
		jt1 = new JTextArea();
		
		jp1.add(jt1);
		jp2.add(jb1);
		
		con.add(jp1);
		con.add(jp2);
		
		jb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				jb1.setEnabled(false);
				Thread thread = new Thread(selctTime);
				thread.start();
				
			}
		});
		
	}
}
这个类就是你上面的 相当于表现层的类,通过按钮的触发事件 开启第二个线程
qq_21992489 2016-03-02
  • 打赏
  • 举报
回复
package swing;

import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeServer extends Thread{

	private static String time;
	
	public static String getTime(){
		
		return time;
	}
	
	public void run(){
		
		while(true){
			
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			time = sdf.format(new Date());
			
			System.out.println(time);
			
		}
		
	}
	
}
这是第一个线程 ,run()中不停地每隔一秒钟取一次时间,你可以在控制台看到时间的变化相当于 你所说的一直在变化的类的属性。
package swing;

import javax.swing.JFrame;

public class SelectTime extends Thread{

	private static View view;
	private static TimeServer timeServer = new TimeServer();

	
	public SelectTime(){
		
		Thread thread1 = new Thread(timeServer);
		thread1.start();
		
	}
	
	public void run(){
		
		View v = View.getView();
		
		while(true){
			
			v.getJt1().setText(timeServer.getTime());
			
		}
	}
	
}
上面是第二个线程 ,run()不停地取得第一个线程中不断变化的时间,并更改 文本框中的值 SelectTime() 在构造器中 开启了第一个线程
package swing;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class View extends JFrame{
	
	private static SelectTime selctTime = new SelectTime();
	private static JTextArea jt1 = new JTextArea();
	private static View view ;
	
	public static View getView(){
		if(view == null){
			view = new View();
		}
		return view;
	}

	public static JTextArea getJt1() {
		return jt1;
	}

	public static void main(String[] args) {
		
		view.getView();
		view.setSize(800,600);
		view.setVisible(true);
		view.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container con = view.getContentPane();
		con.setLayout(new GridLayout(2,1));
		
		JPanel jp1 = new JPanel(new GridLayout(1, 1));
		JPanel jp2 = new JPanel(new GridLayout(1, 1));
		
		JButton jb1 = new JButton("开始计时");
		jt1 = new JTextArea();
		
		jp1.add(jt1);
		jp2.add(jb1);
		
		con.add(jp1);
		con.add(jp2);
		
		jb1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				jb1.setEnabled(false);
				Thread thread = new Thread(selctTime);
				thread.start();
				
			}
		});
		
	}
}
这个类就是你上面的 相当于表现层的类,通过按钮的触发事件 开启第二个线程
klmn111aaa 2016-03-02
  • 打赏
  • 举报
回复
引用 12 楼 qq_21992489 的回复:
getView(int) 我的方法没有参数啊 报这个错误 我也搞不清 你检查下代码是不是打错了
嗯 谢谢 大概意思已经明白了
qq_21992489 2016-03-02
  • 打赏
  • 举报
回复
getView(int) 我的方法没有参数啊 报这个错误 我也搞不清 你检查下代码是不是打错了
klmn111aaa 2016-03-01
  • 打赏
  • 举报
回复
引用 2 楼 ccs02287 的回复:
监听另一个Java文件是什么情况
是楼下说的java的类 刚学概念还比较混乱。。。。
  • 打赏
  • 举报
回复
你说的文件应该是java类吧,可以在改变变量值的时候手动生成一个事件,在文本框上监听这个事件,改变文本框的值就可以了
空心兜兜 2016-03-01
  • 打赏
  • 举报
回复
监听另一个Java文件是什么情况
klmn111aaa 2016-03-01
  • 打赏
  • 举报
回复
谢谢
klmn111aaa 2016-03-01
  • 打赏
  • 举报
回复
引用 6 楼 qq_21992489 的回复:
用2个线程就行了 一个线程用于你的java类 值变化 一个用来取java类的值同时更改文本框内容就行
请问有没有这种类似的实例 ,应该从哪找呢?谢谢
klmn111aaa 2016-03-01
  • 打赏
  • 举报
回复
引用 7 楼 qq_34028912 的回复:
你为什么不把另外一个类写成一个内部类呢。
马上学习一下 内部类 新手不懂。。。谢谢
qq_34028912 2016-03-01
  • 打赏
  • 举报
回复
你为什么不把另外一个类写成一个内部类呢。
qq_21992489 2016-03-01
  • 打赏
  • 举报
回复
用2个线程就行了 一个线程用于你的java类 值变化 一个用来取java类的值同时更改文本框内容就行
klmn111aaa 2016-03-01
  • 打赏
  • 举报
回复
引用 2 楼 ccs02287 的回复:
监听另一个Java文件是什么情况
是楼下说的java的类 刚学概念还比较混乱。。。。有什么简单的方法或类似的实例么?

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧