MyEclipse中的按键技巧:

类中重命名选中改的右键Refactor—>Rename  或alt+shift+R

如果单词忘记怎默写可以按住Alt+/可以让他提示一下

注释代码Ctrl+/ 或Ctrl+shift+/

Ctrl+D删除当前行

Ctrl+i对齐代码

SetText();设置现实的文本

右键Debug As进行调制,需要先设置断点在代码添加的地方最左边右键Toogle Breakpoint

  1. JPanel,表示一个容器,已完成面板。
  2. 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();填充矩形

java jframe 风格 jframe implements_java jframe 风格

以draw开头是描边

g.drawRect();//描边矩形

java jframe 风格 jframe implements_java_02

g.drawOval();//描边椭圆

g.drawArc();/描边扇形

(5)其他绘制方法

  g.drawLine();绘制线段

  g.drawImage();绘制图片

  g.drawPolygon();绘制多边形

  g.drawString();绘制文字

  1. 图片的绘制

(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)方法,内部会不断的加载同一张图片

为了避免图片重复加载需要把上述加载图片内容放在构造方法里,只需加载一次即可。

  1. 封装:

优秀的代码的三个标准:可读、可重用、可扩展。

  1. 图片的边框

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时,表示收缩

  1. 图标:

图标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类监听器:

  1. .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)方法连接起来,就近似于一条曲线

采样点:采样点越密集,结果越逼近一条完美曲线,参数称为粒度