写一下信息窗,信息窗的实现主要是为了很好的打印需要打印的信息,可能这些信息会需要向日志一样输出。
其实我的想法就是一个信息暂时的窗口,比如后面跑算法的时候,凡是需要println的地方,都可以输出到这个信息窗来,这样方便检查。
主要就是建一个panel,实现下面的两个方法,后面需要打印的时候,就通过单例找到这个窗体的实例,然后调用者两个方法,就可以输出在这个信息窗了。
public void AddMessage(MessageItem msg)
{
ListModel<MessageItem> model=list.getModel();
DefaultListModel<MessageItem> model2=(DefaultListModel<MessageItem>)model;
//boolean selectLast=list.getSelectedIndex()==model.getSize()-1||list.getSelectedIndex()<0;
model2.addElement(msg);
//if(!selectLast)
//return;
int index=model.getSize()-1;
list.setSelectedIndex(index);
list.scrollRectToVisible(list.getCellBounds(index, index));
}
@Override
public void AddMessages(ArrayList<MessageItem> msgs)
{
ListModel<MessageItem> model=list.getModel();
DefaultListModel<MessageItem> model2=(DefaultListModel<MessageItem>)model;
//boolean selectLast=list.getSelectedIndex()==model.getSize()-1||list.getSelectedIndex()<0;
for(MessageItem msg:msgs)
{
model2.addElement(msg);
}
//if(!selectLast)
//return;
int index=model.getSize()-1;
list.setSelectedIndex(index);
list.scrollRectToVisible(list.getCellBounds(index, index));
}
调用的展示:
IMessagePanel mp=(IMessagePanel)SingleInstance.getInstance(SingleInstanceKey.IMessagePanel);
mp.AddMessage(
new MessageItem("now we print a line!",MessageType.Information));
运行结果:
到这里 主界面其实就算是搭好了,后面就开始实现一些例子吧。