初学Java GUI部分,最近在写个小游戏熟悉各种用法,所谓活学活用,真是如此,看书时很多东西都一看就懂,但是真到实战应用的时候,即使是很简单的功能,都够自己喝一壶的了~这次就是想实现个保存游戏进度的功能,很显然需要序列化保存的知识,通过搜索知道需要利用JFileChooser类来保存游戏文件到指定文件夹下,可是弹出的对话框是这样的:
看着很不舒服呐,自己用过很多软件另存为功能时都会给个默认文件名(通常都带有创建的时间),就像下面这样:
然后自己继续搜索方法,查到了两种解决方案:
1,JFileChooser里的setSelectedFile这个方法
2,获取对话框中JTextField的自定义方法,代码如下:
public JTextField getTextField(Container c) {
JTextField textField = null;
for (int i = 0; i < c.getComponentCount(); i++) {
Component cnt = c.getComponent(i);
if (cnt instanceof JTextField) {
return (JTextField) cnt;
}
if (cnt instanceof Container) {
textField = getTextField((Container) cnt);
if (textField != null) {
return textField;
}
}
}
return textField;
}
这篇文章现只针对第一种方法,更简洁易学易用。自己使用后还是不行,几近崩溃边缘,最终经过多番查改查得原因,原来是自己逻辑顺序搞错了!设定默认文件应该在显示出保存对话框之前啊!不然你都显示出来了,设定的还有什么意义呢???给谁看,给JVM看,给内存看吗?哈哈,自己现在回想当时是多么愚蠢啊~
jFileChooser.setSelectedFile(new File(getDefaultFileName()));
jFileChooser.showSaveDialog(jFileChooser);
回想之前写GUI这块代码也有很多因为不注重逻辑顺序而导致程序运行不对的情况,比如1⃣️先设置外组件如JFrame的布局管理器,再向其中添加元素(JButton、JPanel等);参考事例如下:
myFrame.setLayout(null);
myFrame.setBounds(300,100, Game.WIDTH + 50, Game.HEIGHT+100) ;
myFrame.setVisible(true);
myFrame.setResizable(false);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myPanel.setLocation(panelXPosition, panelYPosition);
myPanel.setSize(Game.WIDTH + 20, Game.HEIGHT + 20);
2⃣️先加元素,再对加入的元素设置位置和大小!不然你设置的位置和大小都没意义了~
第一次正式发表Java学习分享经验,如果各位能从我的经历中学到获得启发,那将是我最大的幸福!