MyEclipse中的按键技巧:
类中重命名选中改的右键Refactor—>Rename 或alt+shift+R
如果单词忘记怎默写可以按住Alt+/可以让他提示一下
注释代码Ctrl+/ 或Ctrl+shift+/
Ctrl+D删除当前行
Ctrl+i对齐代码
SetText();设置现实的文本
右键Debug As进行调制,需要先设置断点在代码添加的地方最左边右键Toogle Breakpoint
- JPanel,表示一个容器,已完成面板。
- JButton,表示一个按钮控件
先设置一个容器
JPanel root= new JPanel();
frame.setContentPane(root);;
再添加控件
JButton button new JButton(“测试”);//按钮
root.add(button);
1. JLabel lable=new JLabel();//标签
root.add(lable);
JLabel lable=new JLabel("你好");
root.add(lable);
//简写
root.add(new JLabel("你好啊"));
1. 自定义一个窗口
Public class MyFrame extends JFrame{
}
1. 事件处理,监听器,当按钮被点击时,执行相应处理有3种创建方法(内部类、匿名内部类、Lambda表达式)
第一种内部类
1添加一个监听器类,实现ActionListener接口
Class MyActionListener implements ActionListener{
}
2设置监听器
MyActionListener listener =new MyActionListener();
Button.addActionListener(listener);
第二种匿名内部类—简化
button.addActionListener(new ActionListener() {
});
第三种Lambda表达式---更简化
Button.addActionListener((e)->){
}
其中小括号(e)是参数,大括号{}是方法体。
1. 文本框控件JTextField,单行文本框
JTextField textField=new JTextField(20);//20表示初始化20个英文字符的宽度
JTextField的API:
设置文本:
textField.setText(str);
获取文本:
Str=textField.getText();
1. 复选框控件JCheckBox
JCheckBox agreeField=new JCheckBox(“同意用户协议”);
相关API
setSelected(true/false);//初始化设置选中状态
isSelected();是否选中
addActionListener();//勾选或取消获取事件
1. 下拉列表.JComboBox
(1)创建JComboBox
JComboBox<String> colorField=new JComboBox<>();
可见,JComboBox是个泛型,参数类型T表示的是数据项的类型
(2)数据项API方法
-addItem(T)添加数据项,T的类型在创建时指定,这里是String类型,也就是每一项Item的数据类型是String
-getItemcount()数据项的个数
-getItemAt(index)指定索引数据项
例如:
colorField.addItem("红");
colorField.addItem("绿");
colorField.addItem("蓝");
(3)选中的项 按索引访问
getSelectedIndex(); 获取选中的项的索引
setSelectedIndex(); 设置初始化选中项
remove(index);安索引删除
(4)按数据项访问
getSelectedItem();获取选中项的值
setSelectedItem();
remove(item);
(5)事件处理
使用addActionListener()实现用户选择的事件处理
1. JLabel 标签控件
2. 字体//风格//字号
Label.setFont(new Font(“微软宋体”,Font.PLAIN,14));
1. 字体颜色 使用RGB
Label.setForeground(new Color(255,255,255));
(4) 背景色
Label.setOpaque(true);//背景不透明
Label.setBackground(new Color(0,0,255));
默认背景是透明显示的,所以需要setOpaque()设置为不透明
白色:255,255,255 红色:255,0,0 黑色:0,0,0
绿色:0,255,0 蓝色0,0,255 黄色:255,255,0
(5)控件大小
Label.setPreferredSize(new Dimension(60,30));
(6) 文本对齐方式
Label.setHorizontalAlignment(SwingConstants.CENTER);
1. 布局器LayoutManager 负责对每一个子控件进行布局
默认的,JPanel自带一个FlowLayout流式布局器
LayoutManager layout=new FlowLayout();
Root.setLayout(layout);// setLayout()设置一个布局管理器
其中,FlowLayout对子控件从左向右,从上向下一次排列
11.手工布局,即不使用布局器,当窗口大小改变,子控件的位置不会自适应的变化
1 不使用布局器
root.setLayout(null);
2 添加子控件
root.add(a1);
3 指定控件的位置
a1.setBounds(0,0,100,50); 0,0代表左上角 高度:100 宽度:50
.setBounds(x,y,width,height);
其中,x,y左上角坐标width,height 宽度,高度,单位是像素
GUI坐标系:左上角为原点,X轴向右,Y轴向下
1. 自定义布布局器
布局器要实现以下接口
LayoutManager,LayoutManager2 其中LayoutManager2是新版本,继承于LayoutManager
1. 添加一个类SimpleLayout,实现LayoutManager2
Class SimpleLayout implements LayoutManager2{
当添加子控件加入这个容器的时候调用
-void addLayoutComponent(Component comp,Object constraints)
当控件删除的时候调用这个方法
-void removelLayoutComponent(Component comp);
当容器需要布局的时候调用这个方法进行布局
-void layoutContainer(Container parent);
}
1. 使用自定义的布局器
root.setLayout(new SimpleLayout());
JPanel往上溯源属于Container,而各种控件都属于Component
int width=parent.getWidth();//获取容器的宽度
int height=parent.getHeight();//获取容器的高度
Component[] children=parent.getComponents();//把子控件都取出来得到控件数组
1. 简写自定义布局
为了让代码更简洁,添加LayoutAdapter(适配器、转接头)
第一步 声明为抽象类abstract,里面有3个方法没有实现
当自定义布局器时,直接继承layoutAdapter即可,就可以把不用的方法隐藏起来,只需要关注我们想看见的方法
1. 私有的布局器
私有布局器,只负责当前窗口的布局
演示:添加一个内部类
Private class MyCustomLayout extends LayoutAdapter{
}
14.自定义控件
Public class MyControl extends JPanel{
//重写一下方法,负责控件的绘制
Protected void paintComponet(Graphics g){
Super.paintComponent(g);
…
}
}
其中JPanel,既是容器,也是控件。
…中写
//控件的宽度、高度
int width=this.getWidth();
int height=this.getHeight();
//设置背景色
g.setColor(new Color(225,0,0));
//绘制一个矩形
g.fillRect(0, 0, width, height);//依次是左上角坐标,宽度高度
添加到主窗体中
MyControl c=new MyControl();
Root.add(c);
c.setPreferredSize(new Dimension(100,50))//设置大小
15.
(1)RGB 0-255
FF FF FF或(255,255,255)白色
00 00 00或(0,0,0)黑色
FF 00 00 或(255,0,0)红色
FF FF 0 或(255,255,0)黄色其他颜色可查百度
Color类表示一个颜色,例如:
new Color(255,0,0);或new Color(Color.RED);// Color.RED是红色常量
或者new Color(0XFF0000);十六进制
(2)RGBA,带透明度的颜色表示。其中A代表Alpha透明度,位于0-255,例如:
半透明蓝色:
new Color(0,0,255,128);或者
new Color(0x800000FF,true)
(3)自定义标签添加第二个标签需要先添加(白色)底色
绘制一个椭圆Oval 其中以外围矩形作为参数
g.setColor(Color.RED);
g.fillOval(30,30,100,50);//30 30是左上角坐标,100宽度50高度
绘制扇形
g.setColor(Color.RED);
g.fillArc(30,30,100,50,0,120); startAngle 0是起始角度,arcAngle 120是圆弧角度
(4)g.fill Rect()以fil开头是填充效果
g.fillRect();填充矩形
以draw开头是描边
g.drawRect();//描边矩形
g.drawOval();//描边椭圆
g.drawArc();/描边扇形
(5)其他绘制方法
g.drawLine();绘制线段
g.drawImage();绘制图片
g.drawPolygon();绘制多边形
g.drawString();绘制文字
- 图片的绘制
(1)准备一张图片1.jpg,放在data目录下
加载图片,得到Image对象
File file=new File(“data/1.jpg”);
BufferedImage image=ImageIO.read(file);
c.setImage(image);
其中,Image是抽象类,BufferImage视具体实现类
(2)g.drawImage(image,x,y,width,height,observer);
其中-image要绘制的图片对象
-x,y,width,height绘制的位置 observer设为null
当窗口每发生一次变化都会调用paintComponent(Graphics g)方法,内部会不断的加载同一张图片
为了避免图片重复加载需要把上述加载图片内容放在构造方法里,只需加载一次即可。
- 封装:
优秀的代码的三个标准:可读、可重用、可扩展。
- 图片的边框
g.drawRect(0,0,width-1,height-1)
Rectangle相关API
Rectangle rect=new Rectangle(0,0,width,height);
Rect.grow(h,v) 向外扩展h v 个像素。当h,v小于0时,表示收缩
- 图标:
图标Icon,一般是较小的正方形图片、PNG格式,可以自行设置,或者从网站获取例如:网站www.iconfont.cn
使用PictureView显示图标,跟添加图片显示一样
Image icon=ImageIO.read();
c.setImage(icon);
18.资源文件Resource,指放在src下发布的文件。
添加资源文件到src目录,-在src添加一个包res ,-把png图片拷贝到res下
注意,bin\和src\目录是同步的,Eclipse会自动拷贝一份
资源文件的加载:
资源文件的路径:“/res/like.png”
读取资源:
InputStream res=this.getClass().getResourceAsStream(“/res/like.png”);//返回是一个输入流
加载资源为图片
Image image=ImageIO.read(res);
19.封装优化:
在每一次添加一份try catch比较麻烦,所以把加载资源文件进行封装
优化PictureView,添加2个方法
PictureView.setImage(File file)
PictureView.setImage(String resourcePath)
20.鼠标事件:
鼠标事件使用3类监听器:
- .addMouseListener();点击、按下、抬起、移入、移出
2.addMouseMotionListener();移动、拖动
3.addMouseWheeIListener() 鼠标滚轮转动
支持以下鼠标动作:
鼠标按下mousePressed 鼠标抬起 mouseReleased
鼠标移入mouseEntered 鼠标移出 mouseExited
鼠标移动 mouseMoved 鼠标拖动 mouseDragged
鼠标滚轮 mouseWheeIMoved
鼠标事件是基础事件,所有控件都支持,自定义的控件也是支持的
鼠标事件的参数:
MouseEvent代表一个鼠标事件
-getPoint() /getX() /getY():点击的坐标,相对于该控件左上角
-getPointOnScreen()/getXOnScreen()/getYOnScreen():屏幕坐标
-getSource():事件源。即点中的控件
-getButton() :左键、中键,右键
-getClickCount() :单机、双击、三击
21.MouseAdapter,对鼠标事件进行遮蔽,用于简化代码
22.鼠标点击事件:
-mousePressed();鼠标按下
-mouseReleased()鼠标抬起
-mouseClicked()鼠标点击,是指鼠标按下并且原地抬起才会触发这个事件
MouseListener与ActionListener:
-MouseListener 低级事件
-ActionListener 高级事件
对于JButton,也可以使用MouseListener
23.鼠标移入移出:
-mouseEntered();
-mouseExited();
可以利用设置当鼠标移入后高亮状态,不同显示
24.鼠标移动事件MouseMotionListener
-mouseMoved() 鼠标移动
-mouseDragged() 鼠标按住并移动,拖动
26.正弦曲线:
Math.sin(angle)方法可以计算一个角度angle的正弦值。需要注意的是,这里的angle要指定弧度值
曲线模拟:在曲线上取多个点,就像一条曲线,把这些点用drawLine(p1,p2)方法连接起来,就近似于一条曲线
采样点:采样点越密集,结果越逼近一条完美曲线,参数称为粒度