UI界面管理(Open、Close)

UIMgr

public class UIMgr : Singleton<UIMgr> 
{
	static string path = Application.dataPath + "/Editor/UI/UIConfig.json";
	public List<UIJsonInfo> infos = new List<UIJsonInfo>();
	public GameObject OpenDialog(UIDialogType type, Transform parent, Vector3 localPosition, Vector3 localScale)
	{
		UIJsonInfo info;
		info = ReadJsonInfo(UIDialogType.Test);
		GameObject obj;
		Debug.LogError("path = " + info.PrefabPath);
		obj = ResourcesMgr.GetInstance().ResInstantiate(info.PrefabPath);
		if(obj != null)
		{
			obj.transform.parent = parent;
			obj.transform.localPosition = localPosition;
            obj.transform.localScale = localScale;
		}
		else
			Debug.LogError("obj is null");

		return obj;
	}

	public UIJsonInfo ReadJsonInfo(UIDialogType type)
	{
		if(infos == null)
			infos = new List<UIJsonInfo>();
		
		if(infos.Count <= 0)
			JsonMgr.GetInstance().ReadJson<UIJsonInfo>(path,ref infos);
		
		for (int i = 0; i < infos.Count; i++)
    	{
        	UIJsonInfo jsonInfo = infos[i];
			if(jsonInfo.DialogType == type)
			{
				return jsonInfo;
			}
    	}
		return null;
		
	}

	public void CloseDialog(UIDialogType type)
	{
		UIJsonInfo info = ReadJsonInfo(type);
		GameObject uiPrefab = GameObject.Find(info.Name + "(Clone)");
		GameObject.Destroy(uiPrefab);
	}
}

读取文件

public class LoadFile
{
	public static string ReadFile(string path)
	{
		string str = "";
		try
        {
            using (StreamReader fileReader = new StreamReader(path))
            {
                str = fileReader.ReadToEnd();
                fileReader.Dispose();
                fileReader.Close();
            }
        }
        catch (Exception e)
        {
            Debug.LogWarning("[LoadFile] read exception: " + e.Message + ", StackTrace: " + e.StackTrace);
            throw;
        }
		return str;
	}
	
}

json序列化、反序列化

// 需要导入dll
//[Newtonsoft.Json](https://github.com/SaladLab/Json.Net.Unity3D/releases)
public class JsonMgr:Singleton<JsonMgr> 
{
	public void ReadJson<T>(string path, ref List<T> infos)
	{
		string jsonStr = LoadFile.ReadFile(path);
		infos = JsonConvert.DeserializeObject<List<T>>(jsonStr);
	}
}

Unity ResourcesMgr

public class ResourcesMgr : Singleton<ResourcesMgr> 
{
	public T ResLoad<T>(string path) where T : Object
	{
		if(path == null)
		{
			Debug.LogWarning("LoadAssetAtPath is null");
			return null;
		}

		T obj = AssetDatabase.LoadAssetAtPath<T>(path);
		return obj;
		
	}

	public GameObject ResInstantiate(string path)
	{
		GameObject obj = ResLoad<GameObject>(path);
		obj = GameObject.Instantiate(obj);
		return obj;
	}
	
}

示例:
json:
[
{
“PrefabPath”: “Assets/Resources/Prefab/Cube.prefab”,
“DialogType”: “1”,
“Name”:“Cube”,
“Depth”: 10
}
]
脚本:

public enum UIDialogType
{
    None,
	Test

}
public class test : MonoBehaviour
{
    // Use this for initialization
    public Button btn;
    public Button btn1;
    public Transform a;
    void Start()
    {
        btn.onClick.AddListener(Test);
        btn1.onClick.AddListener(Test1);
    }

    // Update is called once per frame
    void Update()
    {

    }

    void Test()
    {
        GameObject uiPrefab;
        uiPrefab = UIMgr.GetInstance().OpenDialog(UIDialogType.Test, GameObject.Find("UIRoot").transform, Vector3.zero, Vector3.one);
        uiPrefab.transform.localPosition = new Vector3(10, 10, 0);
    }

    void Test1()
    {

        UIMgr.GetInstance().CloseDialog(UIDialogType.Test);

    }
}

记事本UI界面设计通常指的是创建一个简单文本编辑器的用户界面。在Java中,你可以使用Swing库来设计这样的UI界面,Swing是Java的一个图形用户界面工具包,它提供了各种组件来构建窗口界面。 一个基本的记事本UI界面通常包括以下几个部分: - 一个文本区域(JTextArea),用户可以在其中输入和编辑文本。 - 菜单栏(JMenuBar),包含文件菜单(JMenu),其中又包含新建(New)、打开(Open)、保存(Save)、另存为(Save As)、退出(Exit)等菜单项(JMenuItem)。 - 状态栏(JStatusBar),用来显示一些状态信息,比如当前文本的字符数。 下面是一个简单的记事本UI界面设计的Java代码示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class NotepadUI extends JFrame { private JTextArea textArea; private JMenuBar menuBar; private JMenu fileMenu; private JMenuItem openItem, saveItem, exitItem; public NotepadUI() { // 设置窗口标题和默认关闭操作 setTitle("简易记事本"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600, 400); setLocationRelativeTo(null); // 窗口居中 // 创建文本区域 textArea = new JTextArea(); add(new JScrollPane(textArea)); // 创建菜单栏 menuBar = new JMenuBar(); // 创建文件菜单 fileMenu = new JMenu("文件"); openItem = new JMenuItem("打开"); saveItem = new JMenuItem("保存"); exitItem = new JMenuItem("退出"); // 添加菜单项的动作监听器 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 处理打开文件的逻辑 } }); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 处理保存文件的逻辑 } }); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 处理退出程序的逻辑 System.exit(0); } }); // 将菜单项添加到文件菜单 fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.addSeparator(); // 添加分隔线 fileMenu.add(exitItem); // 将文件菜单添加到菜单栏 menuBar.add(fileMenu); // 设置窗口的菜单栏 setJMenuBar(menuBar); } public static void main(String[] args) { // 在事件分派线程中创建和显示这个窗口 SwingUtilities.invokeLater(new Runnable() { public void run() { new NotepadUI().setVisible(true); } }); } } ``` 这段代码创建了一个包含文本编辑区域和基本的文件操作菜单的记事本UI界面。请注意,实际的文件操作(打开、保存等)需要额外的代码来实现,这里只是提供了界面和菜单项的动作监听器的框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值