GUI

关于GUI的使用

布局管理器

  1. 流式布局
    new FlowLayout();
    /* LEFT
    RIGHT
    CENTER
    LEADING
    TRAILING*/

  2. 东西南北中
    new BorderLayout();
    /CENTER
    West
    East
    South
    North
    /

  3. 表格布局

    new GridLayout(1,0,0,0);
    //public GridLayout(int rows, int cols);

AWT

  1. 创建窗口
    public class Demo {
    public static void main(String[] args) {
    Frame frame = new Frame();//创建面板
    frame.setBounds(10,20,300,500);
    //设置面板出现的坐标(setLocation)
    // 面板的大小(setSize)
    frame.setBackground(Color.BLACK);
    //设置背景颜色,Color类用于封装颜色
    frame.setVisible(true);
    //设置面板可见性
    frame.setResizable(false);
    //面板大小可变性
    frame.setLayout(null);
    //设置布局

    frame.addWindowListener(new WindowAdapter(){
    @Override
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });//关闭面板,构造了WindowAdapter的匿名内部类
    }
    }

  2. 创建面板
    Panel p = new Panel(new GridLayout(3,2));
    //创建面板
    p.setSize(100,200);
    p.setBackground(Color.CYAN);
    frame.add(p);//将面板加入弹窗中
    //加面板时可以设置布局

  3. //实现按钮
    Button b = new Button("shit");//按钮
    b.setSize(50,200);
    b.addActionListener(new MyMonitor());
    //添加动作监听
    p.add(b);//添加按钮

    //实现接口

    class MyMonitor implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("嘿嘿嘿");
    }

    }

    //4. 实现文本框

    ```java
    TextField t = new TextField();
    t.setEchoChar('*');
    //密码的做法

    t.setSize(40,40);
    p.add(t);
    t.addKeyListener(new Demo());

    @Override
    public void keyPressed(KeyEvent e) {
    TextField t = (TextField)e.getSource();
    //这里获得输入
    String s = t.getText();
    System.out.println(s);
    //清空输入栏
    t.setText("");
    }
    //ps这里我用主类实现了接口,所以没写另一个类

  4. 画笔
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.black);//设置颜色
    g.drawRect(50,50,60,60);//draw画空心
    g.fillOval(80,80,200,30);//fill实心
    g.setColor(Color.BLACK);
    }
    6.用鼠标画图
    private ArrayList points;
    //创建数组存储点的坐标
    //中间省略了对points的初始化

    @Override
    public void paint(Graphics g) {
    g.setColor(Color.red);
    Iterator it = points.iterator();
    //使用迭代器获得数组中数据
    while(it.hasNext()) {
    Point p =(Point)it.next();
    //再将数据转换成Point类,获得坐标
    g.fillOval(p.x,p.y,50,50);
    }
    }
    public void addPoints(Point p){
    points.add(p);
    }
    class MyMouseListener extends MouseAdapter{
    //添加了鼠标监听,使用了适配器
    @Override
    public void mousePressed(MouseEvent e) {
    MyFrame mf =(MyFrame)e.getSource();
    //获得资源
    mf.addPoints(new Point(e.getX(),e.getY()));
    //拿到坐标
    mf.repaint();
    //使点能够连续
    }
    }

Swing

tips

  1. Swing和AWT在一些地方大致相同,类名加了 ‘J’
  2. //java关闭窗口
    jFrame.setDefaultCloseOperation
    (WindowConstants.DISPOSE_ON_CLOSE);

小结

  1. Swing所有东西在Container中
    class MyJFrame extends JFrame{
    public void init(){
    setBounds(10,20,500,600);
    setVisible(true);

    Container container =this.getContentPane();
    //创建容器,获得当前容器,相当于拿到了内容(大雾)
    container.setBackground(Color.DARK_GRAY);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }
    }

  2. 弹窗
    //jb是一个按钮,添加一个动作监听,弹出窗口
    //用了匿名内部类
    jb.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    new MyJDialog();
    }
    });

    container.add(jb);
    //编写弹窗
    class MyJDialog extends JDialog{
    public MyJDialog(){
    this.setBounds(10,20,500,600);
    this.setVisible(true);

    Container container =this.getContentPane();
    container.setBackground(Color.green);

    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    }

  3. 图标
    图标可以add在按钮上,也可以在标签上
    //要实现Icon接口
    class MyJFrame implements Icon{
    MyJFrame m = new MyJFrame(150,150);

    JLabel l = new JLabel(m);
    //把图标加到标签中
    l.setSize(500,500);
    //最好设置一个大小,不然看不见
    container.add(l);
    public MyJFrame(int width,int height){
    this.width = width;
    this.height = height;

    }
    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
    g.setColor(Color.red);
    g.fillOval(x,y,width,height);
    g.setColor(Color.BLACK);
    }
    //实习的一个Icon方法
    }

  4. 文本域
    Container c =this.getContentPane();
    //获取容器
    JTextArea jt = new JTextArea(10,10);
    //建立文本域
    jt.setText("here is");
    JScrollPane js = new JScrollPane(jt);
    //滚动条
    c.add(js);

  5. 按钮
    //有图片的按钮
    jr = new JRadioButton();
    URL url = Demo02.class.getResource("tx.png");
    //获取图片资源
    Icon icon = new ImageIcon(url);
    jb = new JButton();
    jb.setIcon(icon);
    //加入按钮
    jb.setToolTipText("push it");
    //按钮提示
    jb.setSize(500,500);

    //单选按钮
    JRadioButton jrb = new JRadioButton("girl");
    JRadioButton jrb2 = new JRadioButton("boy");
    jrb.setSize(100,100);
    jrb2.setSize(100,100);

    ButtonGroup bg = new ButtonGroup();
    //将按钮添加到组中完成单选
    bg.add(jrb);
    bg.add(jrb2);

    container.add(jrb,BorderLayout.NORTH);
    container.add(jrb2,BorderLayout.SOUTH);

    //多选按钮且不需要装进组里
    JCheckBox jcb = new JCheckBox("boy");
    JCheckBox jcb2 = new JCheckBox("girl");

  6. 下拉框 列表框
    //下拉框
    JComboBox s = new JComboBox();
    //添加词条
    s.addItem(null);
    s.addItem("body");
    s.addItem("eyes");

    container.add(s);

    //列表框
    //String[] s = {"1","2","3"};静态
    Vector s = new Vector();//动态

    JList l = new JList(s);
    s.add("1");

    container.add(l);

posted @ 2021-03-14 22:36  残梦196  阅读(20)  评论(0)    收藏  举报