java_day12

目标:Java web开发

开始磨day6发的象棋程序。
从大佬博客抄到eclipses上效果是这样:

引入package后第一句话是这个:

好,这个我不会qwq。
于是。。。

Swing是Java为图形界面应用开发提供的一组工具包(GUI工具包),是Java基础类的一部分。
Swing包含两种元素:组件(比如按钮)和容器(用来包含组件)。
容器分为顶层容器(JFrame,JApplet,JWindow,JDialog四个,不能被其他容器包含)和中间层容器(必须被其他容器包含)。

JFrame组件应用(下面的代码当然是project的包的一部分,和其他class一起发挥作用):

import javax.swing.*;
class SwingDemo {
    private static void createAndShowGUI() {
        JFrame jfrm = new JFrame("情书");//建立JFrame容器,命名为“情书”
        jfrm.setSize(256, 128);//设置窗口高度和宽度
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭后会发生什么———关闭应用程序
        /*还可以写另外三个参数
            JFrame.DISPOSE_ON_CLOSE 
	    JFrame.HIDE_ON_CLOSE 
    	    JFrame.DO_NOTHING_ON_CLOSE
         *默认情况下,该参数为 HIDE_ON_CLOSE
         *也就是说点击窗口关闭后应用程序还是处于运行状态,在后台进程中还可以看到
         */
        JLabel jlab = new JLabel("P ZQAE TQR");//建立标签组件jlab,内容为“P ZQAE TQR”
        jfrm.getContentPane().add(jlab);//把组件加到容器里
        jfrm.setVisible(true);//显示容器
    }
    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
        /*因为从不同的线程中访问同一个数据会造成数据出现问题
          main函数是一个线程
          界面操作是事件派发线程,是另一个不同的线程
          所以要将main函数这个线程转到“事件派发线程”访问Swing对象
          invokeLater方法会将代码转到事件派发线程中来执行:SwingUtilities.invokeLater(Runnable类的对象)
          这里用了定义匿名内部类的写法,它会创建一个匿名对象,该对象实现了Runnable接口
        */
    }
}

效果是这个:好像还不错哈哈

BorderLayout和FLowLayout布局:

import java.awt.*;//layout需要用到awt,抽象窗口工具包
import javax.swing.*;
class LayoutDemo{
    private static void addComponentsToPane(Container pane){
        // content pane默认是BorderLayout,因此这里可以省略
        //pane.setLayout(new BorderLayout());  
    	JButton button = new JButton("PAGE_START");
        pane.add(button, BorderLayout.PAGE_START);
        button = new JButton("CENTER");
        button.setPreferredSize(new Dimension(200, 100));//设置按钮大小
        pane.add(button, BorderLayout.CENTER);
        button = new JButton("LINE_START");
        pane.add(button, BorderLayout.LINE_START);
        button = new JButton("PAGE_END");
        pane.add(button, BorderLayout.PAGE_END);
        button = new JButton("LINE_END");
        pane.add(button, BorderLayout.LINE_END);
        //上下左右中五个位置放五个组件,这里是五个按钮
        /*还可以这么写,用FlowLayout
          pane.setLayout(new FlowLayout());
          pane.add(new JButton("111111111111"));
          pane.add(new JButton("2"));
          pane.add(new JButton("33333"));
          pane.add(new JButton("44444"));
          pane.add(new JButton("55"));
         */
    }
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("BorderLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addComponentsToPane(frame.getContentPane());//返回值为Containter类型的
        frame.pack();//根据子容器大小调整大小,没有这句代码的话,默认大小为0
        frame.setVisible(true);
    }
    public static void main(String[] args) {              
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                createAndShowGUI();
            }
        });
    }
}

效果是这个:

还有

posted @ 2021-07-16 21:59  zhuangzhongxu  阅读(38)  评论(0编辑  收藏  举报