首页 新闻 赞助 找找看

java将一个值从一个类中传递到另一个类中的某个方法内

0
悬赏园豆:20 [已解决问题] 解决于 2022-06-13 18:30

使用Java开发一个记事本,实现查找一段字符并且定位到字符所在位置,我的主类调用另一个类(我们叫它A类)中的一个方法来获取字符串在文本中的位置index,这个index的值再A类中,我想将这个index的值再重新传回我的主类当中,以实现定位功能,但是由于项目问题我无法再重新new一个主类,new一个主类传值会重新生成一个记事本界面且文本域中无内容,所以有没有其它的方法将index变量的值传回我的主类当中。谢谢。

01-cheng的主页 01-cheng | 初学一级 | 园豆:171
提问于:2022-06-06 22:23
< >
分享
最佳答案
1

哈哈哈好,最近我也在用GUI写界面,一个Redis的客户端,我也经常遇到这个值到处传递的问题。
我最常用的办法就是,被调用的类也就是你说的A类,写一个返回的方法返回index值
这是最直接的。如果这个不行。那就在主类写一个回调的钩子函数,再把主类或者钩子函数传递到A中,在完成查找之后调用主类的钩子函数,将index给主类,还有很多其他的,看场景。
我不知道你的主类是什么就叫它R吧
class R(){
public void indexCallback(int index){
...
}
}
Tihuan(R r,String listx){
this.r = r;
}

Tihuan find=new Tihuan(this, youInput);

			if(index==-1) {
				JOptionPane.showMessageDialog(null, "没有找到目标字符,请重新确认(查找为大小写敏感)");
			}
			else {
				//新弹出一个对话框显示你要查找的字符串再我文档的第几个
				JOptionPane.showMessageDialog(null,index+1);
                                    r.indexCallback(index);

//希望将index的值传回上面主类中的方法
}

收获园豆:10
Raiden_xin | 菜鸟二级 |园豆:268 | 2022-06-11 22:55
其他回答(6)
0

消息通知。
ThreadLocal。
其它。

快乐的凡人721 | 园豆:3915 (老鸟四级) | 2022-06-06 23:12
0

没看明白,建议附上关键代码(本编辑器支持markdown,可对代码格式化)?

会长 | 园豆:12401 (专家六级) | 2022-06-07 13:46

主类:

//上面有构建主窗体的构造方法
find.addActionListener(new ActionListener() {
			/*
			 *实现查找
			 *将文本域中的内容通过Tihuan类的构造方法传入Tihuan类中,
			 */
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				//获取列数
				//获取文本域内输入的内容
				String youInput=input.getText();
//				gettedList=new ArrayList<String>();
				
				Tihuan find=new Tihuan(youInput);
			}
		});

Tihuan类:

Tihuan(String listx) {
		//setFrame构建查找对话框
		setFrame();
		addListen(listx);
	}

//将查找按钮绑定事件
	public void addListen(String list) {
		but1.addActionListener(new ActionListener() {
			// 查找的按钮绑定
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				int column,line;//column is 列,line is 行
				index=list.indexOf(fiel.getText());
//				line=index/row+1;
//				column=index%row;
				if(index==-1) {
					JOptionPane.showMessageDialog(null, "没有找到目标字符,请重新确认(查找为大小写敏感)");
				}
				else {
					//新弹出一个对话框显示你要查找的字符串再我文档的第几个
					JOptionPane.showMessageDialog(null,index+1);
//希望将index的值传回上面主类中的方法
				}
			}
		});
	}
支持(0) 反对(0) 01-cheng | 园豆:171 (初学一级) | 2022-06-07 17:59

@01-cheng: 我还是每太看明白。这样写的话会有什么问题:

class Main
{
   void myFunc()
   {
      A a = new A();
      a.doSomting();
      int index = a.Index;
   }
}
支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2022-06-07 19:42
0

面向对象设计思想早已不是什么新鲜事物,在Java实际项目中也是主流的编程思想。 正是因为Java,C#天然就是支持面向对象的,反而很多童鞋并不能讲清楚什么是面向对象。

/**
 * Description: 大象类
 */
@Data
public class Elephant {

    private Object head;//头
    private List<Object> feets;//四肢
    private Object body;//躯干
    private Object tail;//尾巴

    public String toString(){
        return "大象";
    }
}


实例化一头大象

//实例化一头大象
Elephant elephant=new Elephant();

实体化一个冰箱


//实体化一个冰箱
Fridge fridge=new Fridge();

调用冰箱的功能

fridge.openTheDoor();
fridge.store(elephant);
fridge.closeTheDoor();
智客工坊 | 园豆:1855 (小虾三级) | 2022-06-08 22:58
0

可以定义一个全局缓存,用于保存这个值

平安QAQ | 园豆:202 (菜鸟二级) | 2022-06-10 09:44
1

我的理解:

一、主类只能有一个实例,就是单例的
二、index由A类的某个方法获取,A#getIndex(); 这个方法应该是递归的并且返回值是个数组或集合
三、在主类中使用index,最简单的方法,把getIndex();设置为static的,在主类中直接调用

A类:
public static List<Integer> getIndex(String textarea);
主类:
List<Integer> indexs = A.getIndex(textarea);
飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-10 11:10
1

提供三类实现思路
思路一:让A类直接返回,可以返回一个比如Result 类,这个类可以按照你想要的字段来定义,主类调用A类时,A类返回Result实例,主类获取Result实例使用相应的值即可。

思路二:可以借助缓存、队列、文件等各类可以用来存储数据的介质,A类计算完成后把结果存储到存储介质,然后主类可以定时获取、事件触发获取等;

思路三:你做的是记事本程序,应该是桌面程序类。可以在你的程序界面中的某个区域放置一个label标签,属性设置为不可见状态,就是 visible 属性,设置为false(应该),你可以验证下。 然后可以把A类计算的结果放到 label标签中,然后主类去获取值,用完后把label设置为空或者0 等都可以。

以上三种可任选。

收获园豆:10
西越泽 | 园豆:10775 (专家六级) | 2022-06-13 16:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册