问题起源
我呢,是一名目前还在纠结毕业设计的苦逼学生。之前壮志凌云,许下:“自己的毕设要自己写”的豪情壮志。还为了防止重题,直接避开了“连连看”、“推箱子”这种网上有对照的题目,选了个“四顶棋”这个小时候玩的游戏,而且网上丝毫没有相关资料。连这个“四顶棋”的名字,都不知道是不是这个游戏的本名!
以上均是废话,往下看吧。
按钮显示位置错误(按钮充满整个窗体)
如果是将按钮添加进窗体JFrame中
//JFrame代码:
setBounds(500,0,500,500); //设置窗体大小以及显示位置
JButton jbutton = new JButton("示例"); //创建按钮实例对象
add(jbutton); //向窗体中加入按钮
运行结果:
可以看到,整个窗体都是按钮。
这是窗体布局的问题,窗体默认布局为边界布局(BorderLayout),所以才是这个样子。可以将布局设置为流式布局即可。
//JFrame代码
setLayout(new FlowLayout()); //设置布局为流式布局
setBounds(500,0,500,500); //设置窗体大小以及显示位置
JButton jbutton = new JButton("示例"); //创建按钮实例对象
add(jbutton); //向窗体中加入按钮
运行结果:
还可以将布局设置为null,也就是不需要布局。这样,你添加进的所有组件均需要手动设置其位置及大小。
//JFrame代码
setLayout(null); //设置没有布局
setBounds(500,0,500,500); //设置窗体大小以及显示位置
JButton jbutton = new JButton("示例"); //创建按钮实例对象
jbutton.setBounds(0,0,100,100); //设置按钮位置及大小
add(jbutton); //向窗体中加入按钮
运行结果:
按钮的添加位置
我做这个游戏时,曾遇到这个问题:按钮到底是放在面板中,还是窗体中?
经过我大量实验,得出应该放在面板中。
以下是菜鸟我的理解:
- 窗体是最基本的框架,代表我们看到的这个窗口。
- 面板是这个窗口的每个页面。
而我们的按钮以及其他控件虽然可以放在窗体上,但是这是建立在你没有面板的情况下。
如果有了面板,你会发现:面板会将按钮挡住!
所以我的程序,所有按钮均添加在面板中。
按钮只有在鼠标滑过才显示
这个问题是困扰我很久的一个问题。查阅了很多资料,以及各种博客。最后得出了我的解决办法:
我遇到的问题是:
按钮添加在面板中,有两个按钮。但是每次都只会显示第一个按钮,第二个需要鼠标滑过去才显示
而且如果点击面板的其他地方,所有按钮都会消失
此时鼠标滑过又会显示出来
原因: 面板的绘制,挡住了按钮
- 当点击面板时,会触发面板的重绘
- 而按钮的显示没有在重绘的进程中
解决办法: 将按钮获取焦点的方法放在面板的重绘代码中
//JPanel代码
public void paintComponent(Graphics g) {
//按钮重新获取焦点
startButton.requestFocus();
tableButton.requestFocus();
}