NotepadBaseOnJava项目总结与问题(2)

来源:互联网 发布:淘宝的广告价位图 编辑:程序博客网 时间:2024/06/06 22:13

1.一开始就要设计模型

开始的时候把几乎所有代码都放在了mainGUI类中,后来为了GUI和Controller分开花了很多功夫。

但是一些可重用的类,比如FontChooser,FileChooser,FindNReplace,GotoLine等是否需要把界面和后台放在一个类中?


2.初始化单例类要注意死循环的问题

public static MainGUI getInstance(){if(instance==null)instance=new MainGUI();return instance;}

在new mainGUI()的时候,系统初始化其他单例类。

private Menu menuA=Menu.getInstance();private GotoLine gotoL=GotoLine.getInstance();private FindNReplace findR=FindNReplace.getInstance();private StatusBar bar=StatusBar.getInstance();private FontChooser fontC=FontChooser.getInstance();

注意在其他单例类的初始化部分中,不能调用mainGUI的getInstance(),否则前一个getInstance()没有返回,再去call同一个getInstance(),就会死循环。

private MainGUI main=MainGUI.getInstance();

应放在Init()中等待后面再call。


3.自定义JList的Item应使用DefaultListCellRenderer

为了实现字体对话框中,列表字体随选择项变化,要实现ListCellRenderer接口

class FontCellRenderer implements ListCellRenderer

protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();  

这个函数返回一个Component,把它转换成JLabel或者JPanel等自定义的组件作为JList的Item。

JLabel label = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,isSelected, cellHasFocus);

如果不用这个函数,就要自己实现选中项目时颜色的变化之类的东西。


4.String.lastIndexOf(content,startindex)注意startindex

startindex这个索引代表的字符也在查找之列,在实现查找下一个的时候,应把上一次返回的startindex-1.


5.在Frame上Add,Remove,setVisable组件后不会自动变更Frame的大小,需要手动pack()。



https://code.csdn.net/ffyjd/notepadbaseonjava



0 0
原创粉丝点击