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