图形用户界面(GUI)
GUI是指采用图形方式显示的计算机操作用户界面。大家可以看看电脑上的浏览器,帮里面文字全部去掉,可以将其看成一个长方形,右上角三个按钮,左上角一个图标,窗体就是这个,可以理解为一个框架,面板就是窗体上面的东西,如图:
图中蓝色部分是面板,其他部分是窗体,面板在窗体上面(面板下面是有窗体的)
窗体和面板
窗体和面板构成了这么一个图形界面,难么这么一个窗体和面板需要设置什么呢,注意下面的代码:
public class JFrame_test {
public static void main(String[] args) {
//1、创建一个窗体(JFrame)的对象。frame
JFrame frame = new JFrame();
//3、设置窗体的宽高为800*400px
frame.setSize(800, 400);
//4.1、设置坐标
//frame.setLocation(200,200);
//4.2、设置居中
frame.setLocationRelativeTo(null);
//5、设置默认关闭按钮功能
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame.EXIT_ON_CLOSE = 3
//6、设置窗体的大小不可被更改
frame.setResizable(false);
//7、取消窗体边框
//frame.setUndecorated(true);
//8.1、设置窗体的背景颜色
/*frame.setBackground(Color.BLACK);*/
//8.2、创建一个面板对象 panel
JPanel panel = new JPanel();
//8.3、设置面板颜色
//panel.setBackground(Color.BLACK);
panel.setBackground(new Color(150,138,241));//自定义颜色(三原色)
//8.4、将面板(panel)添加到窗体(frame)
frame.add(panel);
//2、设置窗体可见
frame.setVisible(true);
}
}
这里必须要注意一下,一定要导包,JFrame和JPanel,我们调用了这个就需要导包,导包的快捷键是control+alt+o(字母)。
细细的观察代码,我们发现我们设置了背景颜色(background color),尺寸(size),位置(location),可见(visible)等,这里要注意,一定要设置窗体可见,只有设置窗体可见你才能够看见,我们做了两个对象,一个是JFrame,另一个是JPanel,JPanel的对象要添加到窗体上面去。效果如图:
(由于设置了我个人屏幕设置了滤镜,实际效果颜色与之不一样,有细微差别)
画⚪
在面板上画一个⚪,这里先要说明这个⚪的坐标,这个坐标可不是圆心,在计算机里面,坐标系是子啊左上角,x朝右,y朝下,我们在画图工具了画圆的时候是从左上角往右下角拉,坐标的位置就在左上角的那个点,理论存在,开始实践(狗头)。
```java
public class YFrame extends JFrame {
public YFrame() {
YPanel panel = new YPanel();
panel.setBackground(Color.LIGHT_GRAY);
panel.setSize(500, 222);//面板大小
this.add(panel);
this.setSize(1200, 1000);
//this.setLayout(null);//布局管理器,面板大小有意义
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBackground(Color.BLACK);
/*JPanel panel = new JPanel();
panel.setBackground(new Color(0,122,122));
this.add(panel);*/
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new YFrame();
}
}
class YPanel extends JPanel {
//重写绘制方法paint alt /
@Override
public void paint(Graphics g) {//Graphics 画笔类型 g 代表当前的画笔
g.setColor(Color.BLUE);
super.paint(g);
g.fillOval(100, 300, 100, 100);
}
通过这个就可以画一个⚪,实际上我们都只是使用里面JFrame和JPanel里面的函数,这也是Java比c简单地方。
简单控制
使用继承接口来完成,将代码改为:
public class YFrame extends JFrame {
public YFrame() {
YPanel panel = new YPanel();
panel.setBackground(Color.LIGHT_GRAY);
panel.setSize(500, 222);
this.add(panel);
//监听面板*****************************************************************
this.addKeyListener(panel);
//*******************************************
this.setSize(1200, 1000);
//this.setLayout(null);//布局管理器
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBackground(Color.BLACK);
/*JPanel panel = new JPanel();
panel.setBackground(new Color(0,122,122));
this.add(panel);*/
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new YFrame();
}
}
class YPanel extends JPanel implements KeyListener{//继承接口
int x =100,y = 300;
//重写绘制方法paint alt /
@Override
public void paint(Graphics g) {//Graphics 画笔类型 g 代表当前的画笔
g.setColor(Color.BLUE);
super.paint(g);
g.fillOval(x, y, 100, 100);
}
@Override
public void keyTyped(KeyEvent e) {//敲击执行
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {//按键执行
if(e.getKeyCode() == KeyEvent.VK_UP){
y=y-10;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN){
y=y+10;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
x=x+10;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT){
x=x-10;
}
repaint();//重新绘制面板
}
@Override
public void keyReleased(KeyEvent e) {//松键执行
// TODO Auto-generated method stub
}
}
下面那三个函数别自己打,不划算,你打完别人都做完了,把鼠标移到YPanel,选择add unimplemented methods。注意在窗体的构造方法里面添加监听。
现在就是一个可以移动的⚪,会了这个,画个鸡,画个蛇,画个海龟都可以让它动。
(个人学习总结,如有错误,敬请斧正,学习时间,20,11)