When create a GUI class I’m find a problem of access to the variables in another class using a universal procedure. Here is my solution to the problem 🙂

package testexample;
 
import java.lang.reflect.Field;
 
class S3Element
{
 
private Object obj=null;
private Field fld=null;
private String fieldName="";
 
/**
 *
 * @param obj - A reference object to override
 * @param fieldName - field name to modify the variable
 */
public S3Element(Object obj, String fieldName){
  this.obj=obj;
  this.fieldName=fieldName;
  this.fld=findField(obj, fieldName);
}
 
private static Field findField(Object genericObject, String filedName){
  if (genericObject != null){
	Field[] declaredFields=genericObject.getClass().getDeclaredFields();
	for (int i=0; i < declaredFields.length; i++){
	  Field field=declaredFields[i];
	  if (field.getName().equals(filedName)){
		field.setAccessible(true);
		return field;
	  }
	}
	return findField((Class) genericObject.getClass().getGenericSuperclass(), filedName);
  }
  throw new RuntimeException("No find field: " + filedName);
}
 
/**
 * Setting a new field value
 *
 * @param value
 */
public void setValue(Object value){
  try {
	System.out.println("setValue for field: " + fieldName + " in object  " + obj.getClass().getName() + " to " + value.toString());
	fld.set(obj, value);
  } catch (Exception e) {
	throw new RuntimeException("Error setValue for field: " + fieldName + " in object" + obj.getClass().getName(), e);
  }
}
 
/**
 *
 * @return
 */
public Object getValue(){
  try {
	return fld.get(obj);
  } catch (Exception e) {
	throw new RuntimeException("Error getValue for field: " + fieldName + " in object" + obj.getClass().getName(), e);
  }
}
}
 
class Test
{
 
public float testFloat=2f;
public int testInteger=100;
 
public void run(){
 
  S3Element el=new S3Element(this, "testFloat");
  System.out.println(" testFloat: " + testFloat);
  el.setValue(10f);
  System.out.println(" testFloat: " + testFloat);
  el.setValue(20f);
  System.out.println(" testFloat: " + testFloat);
  el.setValue(30f);
  System.out.println(" testFloat: " + testFloat);
 
  el=new S3Element(this, "testInteger");
  System.out.println(" testInteger: " + testInteger);
  el.setValue(10);
  System.out.println(" testInteger: " + testInteger);
  el.setValue(20);
  System.out.println(" testInteger: " + testInteger);
  el.setValue(30);
  System.out.println(" testInteger: " + testInteger);
 
}
}
 
public class TestExample
{
 
public static void main(String[] args){
  Test tst=new Test();
  tst.run();
}
}