NotepadBaseOnJava项目总结与问题(1)

Notepad是我第一次编写Java GUI界面的作业,当初看题目很简单:模拟Windows记事本,随着功能的逐步加入,一些在书本上看不到的问题显现出来。特此记录。


1.布局问题

FontChooser这个实现字体选择对话框的类中,要把”字体“,”字形“,大小”3个标签和下面的Jlist对齐。我一开始想到用网格包布局,通过GridConstrant的Gridx和GridWidth设置位置和大小,·但是没有效果,两个标签还是挤在一起。最后没法只能用网格布局:

private JPanel jdPanelUP = new JPanel(new GridLayout(1, 2, 40, 10));

但三个标签宽度不一样,又不想用setBounds指定位置和大小,最后只能把两个标签的内容合并到一个:

private JLabel jdLabel2 = new JLabel("字形:                         大小:");

结果还是自己指定了宽度。。。


2.JList自动翻滚问题
FontChooser中FontName这个List在初始化的时候应该自动滚动到“宋体”项。
这个可以自动翻滚:

jdList1.setAutoscrolls(true);
jdList1.setSelectedValue(fontName, true);

这个就不行了:

jdList3.setAutoscrolls(true);
jdList3.setSelectedIndex(25);


3.JTextField弹出气泡框问题

记事本的“转到”功能里,如果输入了非数字字符,文本框会自动弹出一个气泡提示输入合法的字符。GotoLine中TextField没有这个功能,只能设置ToolTipText,但这是鼠标移上去才会显示,可能需要调用Windows环境的函数才能实现吧。


4.StateBar隐式递归调用导致 Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError 问题

StateBar继承了JPanel,为了绘制上下阴影,重写了protected void paintComponent(Graphics g):

protected void paintComponent(Graphics g){

super.paint(g); //状态栏顶部阴影 //状态栏底部阴影 }

难道调用父类的paint又会Call子类的paintComponent?去掉以后正常,说明在子类的paintComponent之前已经绘制了父类的Component?


5.TextArea输入字符导致StateBar右下角同步出现输入字符的问题

完全没有思路。


6.在MainGui中用StateBar添加监听事件,在里面对StateBar调用方法,会导致Cannot refer to a non-final variable bar inside an inner class defined in a different method 问题

错误是指在一个Method中定义的内部类不能引用另一个Method的非final量,原因就在于内部类和Method的局部变量生存周期不一致。原来是在mainGui添加监听事件:

init(){
stateBar.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		if(stateBar.getState()==true){
			barmain.setVisible(true);
			barmain.adjustWidth(main.frame);
		}
		else
			barmain.setVisible(false);
		main.frame.pack();//需要自动调节frame大小
}});
//......
}

把其移动到另一个类就可以了,深层原因?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值