awt&swing 学习笔记(3)

图片查看器

package imageIo;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ReadAndSaveImage {
    
    

    private Frame frame = new Frame("图片查看器");

    private BufferedImage image;

    private class MyCanvas extends Canvas {
    
    

        @Override
        public void paint(Graphics g) {
    
    
            if (image != null) {
    
    
                g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
            }
        }
    }

    private MyCanvas imageComponent = new MyCanvas();

    public void init() throws Exception {
    
    

        //设置菜单项
        MenuBar mb = new MenuBar();
        Menu menu = new Menu("文件");
        MenuItem openItem = new MenuItem("打开");
        MenuItem saveItem = new MenuItem("另存为");

        openItem.addActionListener(new ActionListener() {
    
    
            public void actionPerformed(ActionEvent e) {
    
    
                //弹出对话框,选择本地图片
                FileDialog oDialog = new FileDialog(frame);
                oDialog.setVisible(true);
                //读取用户选择的图片
                String dir = oDialog.getDirectory();
                String file = oDialog.getFile();
                try {
    
    
                    image = ImageIO.read(new File(dir, file));

                    imageComponent.repaint();

                } catch (IOException e1) {
    
    
                    e1.printStackTrace();
                }
            }
        });


        saveItem.addActionListener(new ActionListener() {
    
    
            public void actionPerformed(ActionEvent e) {
    
    
                //弹出对话框,另存为
                FileDialog sDialog = new FileDialog(frame, "保存图片", FileDialog.SAVE);
                sDialog.setVisible(true);
                String dir = sDialog.getDirectory();
                String file = sDialog.getFile();

                try {
    
    
                    ImageIO.write(image, "JPEG", new File(dir, file));
                } catch (IOException e1) {
    
    
                    e1.printStackTrace();
                }
            }
        });


        mb.add(menu);
        menu.add(openItem);
        menu.add(saveItem);

        frame.setMenuBar(mb);
        frame.add(imageComponent);

        frame.setBounds(200, 200, 800, 600);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
    
    
            @Override
            public void windowClosing(WindowEvent e) {
    
    
                System.exit(0);
            }
        });
    }


    public static void main(String[] args) throws Exception {
    
    
        new ReadAndSaveImage().init();
    }
}

border

package swing.border;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;

public class Dome1 {
    
    


    JFrame f =new JFrame("测试边框");



    public void init(){
    
    

        //组装视图

        f.setLayout(new GridLayout(2,4));

        //创建BevelBorder
        Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.red, Color.green, Color.blue, Color.gray);
        f.add(getJPanelWithBorder(bevelBorder,"bevelBorder"));

        //创建LineBorder
        Border lineBorder = BorderFactory.createLineBorder(Color.yellow, 10, true);
        f.add(getJPanelWithBorder(lineBorder,"lineBorder"));

        //emptyBorder
        Border emptyBorder = BorderFactory.createEmptyBorder(10, 5, 20, 30);
        f.add(getJPanelWithBorder(emptyBorder,"emptyBorder"));

        //创建etchedBorder
        Border etchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,Color.red,Color.green);
        f.add(getJPanelWithBorder(etchedBorder,"etchedBorder"));

        //创建titledBorder
        TitledBorder titledBorder = BorderFactory.createTitledBorder(new LineBorder(Color.orange, 10), "这是标题",TitledBorder.LEFT,TitledBorder.BOTTOM);
        f.add(getJPanelWithBorder(titledBorder,"titledBorder"));

        //创建matteBorder
        MatteBorder matteBorder = BorderFactory.createMatteBorder(10, 5, 20, 10, Color.green);
        f.add(getJPanelWithBorder(matteBorder,"matteBorder"));

        //创建compoundBorder

        CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(titledBorder, new LineBorder(Color.red, 10));
        f.add(getJPanelWithBorder(compoundBorder,"compoundBorder"));


        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public JPanel getJPanelWithBorder(Border border, String content){
    
    
        JPanel jPanel =new JPanel();
        jPanel.add(new JLabel(content));

        //设置边框
        jPanel.setBorder(border);

        return jPanel;
    }


    public static void main(String[] args) {
    
    
        new Dome1().init();
    }

}

工具条

package swing.JToolBar;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Dome {
    
    


    JFrame f =new JFrame();

    JToolBar jToolBar =new JToolBar("播放工具条",SwingConstants.HORIZONTAL);

    JTextArea ta =new JTextArea(10,20);

    Action pre =new AbstractAction("上一曲",new ImageIcon("src/main/java/img/component/pre.png")) {
    
    
        @Override
        public void actionPerformed(ActionEvent e) {
    
    
            ta.append("上一曲\n");
        }
    };

    Action pause =new AbstractAction("暂停",new ImageIcon("src/main/java/img/component/pause.png")) {
    
    
        @Override
        public void actionPerformed(ActionEvent e) {
    
    
            ta.append("暂停\n");
        }
    };

    Action next =new AbstractAction("下一曲",new ImageIcon("src/main/java/img/component/next.png")) {
    
    
        @Override
        public void actionPerformed(ActionEvent e) {
    
    
            ta.append("下一曲\n");
        }
    };




    public void init(){
    
    

        //组装视图

        JButton preB =new JButton(pre);
        JButton pauseB =new JButton(pause);
        JButton nextB =new JButton(next);


        jToolBar.add(preB);
        jToolBar.addSeparator();
        jToolBar.add(pauseB);
        jToolBar.addSeparator();
        jToolBar.add(nextB);


        //可以让工具条拖动
        jToolBar.setFloatable(true);


        //文本默认不支持滚动条
        JScrollPane jScrollPane =new JScrollPane(ta);

        f.add(jScrollPane);

        f.add(jToolBar, BorderLayout.NORTH);


//        f.add(ta);





        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);




    }


    public static void main(String[] args) {
    
    
        new Dome().init();
    }


}

实战综合

package swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;

public class Dome1 {
    
    


    JFrame f = new JFrame("测试swing基本组件");

    //定义一个按钮,并为其指定图标
//    Icon okIcon = new ImageIcon(ImagePathUtil.getRealPath("2\\ok.png"));
    JButton ok = new JButton("确定");
//    JButton ok = new JButton("确定",okIcon);

    //定义一个单选按钮,初始处于选中的状态
    JRadioButton male = new JRadioButton("男",true);
    //定义一个单选按钮,初始处于选中状态
    JRadioButton female = new JRadioButton("女",false);

    //定义一个ButtonGroup,把male和female组合起来,实现单选
    ButtonGroup bg  = new ButtonGroup();

    //定义一个复选框,初始处于没有选中状态
    JCheckBox married = new JCheckBox("是否已婚?",false);

    //定义一个数组存储颜色
    String[] colors = {
    
     "红色", "绿色 " , "蓝色 " };

    //定义一个下拉选择框,展示颜色
    JComboBox<String> colorChooser = new JComboBox<String>(colors);

    //定一个列表框,展示颜色
    JList<String> colorList = new JList<String>(colors);

    //定义一个8行20列的多行文本域
    JTextArea ta = new JTextArea(8,20);

    //定义一个40列的单行文本域
    JTextField name = new JTextField(40);

    //定义菜单条
    JMenuBar mb = new JMenuBar();

    //定义菜单
    JMenu file = new JMenu("文件");
    JMenu edit = new JMenu("编辑");

    //创建菜单项,并指定图标
    JMenuItem newItem = new JMenuItem("新建");
    JMenuItem saveItem = new JMenuItem("保存");
    JMenuItem exitItem = new JMenuItem("退出");

    //可选择的菜单栏
    JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自动换行");
    JMenuItem copyItem = new JMenuItem("复制");
    JMenuItem pasteItem = new JMenuItem("粘贴");

    //定义二级菜单,将来会添加到编辑中
    JMenu format = new JMenu("格式");
    JMenuItem commentItem = new JMenuItem("注释");
    JMenuItem cancelItem = new JMenuItem("取消注释");

    //定义一个右键菜单,用于设置程序的外观风格
    JPopupMenu pop = new JPopupMenu();

    //定义一个ButtongGroup对象,用于组合风格按钮,形成单选
    ButtonGroup flavorGroup = new ButtonGroup();

    //定义五个单选按钮菜单项,用于设置程序风格
    JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal 风格",true);
    JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus 风格",true);
    JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("Windows 风格",true);
    JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("Windows 经典风格",true);
    JRadioButtonMenuItem motifItem = new JRadioButtonMenuItem("Motif 风格",true);



    //初始化界面
    public void init(){
    
    

        //------------------------组合主区域------------------------
        //创建一个装载文本框和按钮的JPanel
        JPanel bottom = new JPanel();
        bottom.add(name);
        bottom.add(ok);

        f.add(bottom, BorderLayout.SOUTH);

        //创建一个装载下拉选择框、三个JChekBox的JPanel
        JPanel checkPanel = new JPanel();
        checkPanel.add(colorChooser);
        bg.add(male);
        bg.add(female);

        checkPanel.add(male);
        checkPanel.add(female);
        checkPanel.add(married);

        //创建一个垂直排列的Box,装载checkPanel和多行文本域
        Box topLeft = Box.createVerticalBox();

        //使用JScrollPane作为普通组件的JViewPort
        JScrollPane taJsp = new JScrollPane(ta);
        topLeft.add(taJsp);
        topLeft.add(checkPanel);

        //创建一个水平排列的Box,装载topLeft和colorList
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);

        //将top Box 添加到窗口的中间
        f.add(top);

        //---------------------------组合菜单条----------------------------------------------
        //为newItem添加快捷键 ctrl+N
        newItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));
        newItem.addActionListener(new ActionListener() {
    
    
            @Override
            public void actionPerformed(ActionEvent e) {
    
    
                ta.append("用户点击了“新建”菜单\n");
            }
        });


        //为file添加菜单项
        file.add(newItem);
        file.add(saveItem);
        file.add(exitItem);

        //为edit添加菜单项
        edit.add(autoWrap);
        edit.addSeparator();
        edit.add(copyItem);
        edit.add(pasteItem);
        //为commentItem添加提示信息
        commentItem.setToolTipText("将程序代码注释起来");

        //为format菜单添加菜单项
        format.add(commentItem);
        format.add(cancelItem);

        //给edit添加一个分隔符
        edit.addSeparator();

        //把format添加到edit中形成二级菜单
        edit.add(format);

        //把edit file 添加到菜单条中
        mb.add(file);
        mb.add(edit);

        //把菜单条设置给窗口
        f.setJMenuBar(mb);

        //------------------------组合右键菜单-----------------------------

        flavorGroup.add(metalItem);
        flavorGroup.add(nimbusItem);
        flavorGroup.add(windowsItem);
        flavorGroup.add(classicItem);
        flavorGroup.add(motifItem);

        //给5个风格菜单创建事件监听器
        ActionListener flavorLister = new ActionListener() {
    
    
            @Override
            public void actionPerformed(ActionEvent e) {
    
    
                String command = e.getActionCommand();
                try {
    
    
                    changeFlavor(command);
                } catch (Exception e1) {
    
    
                    e1.printStackTrace();
                }
            }
        };

        //为5个风格菜单项注册监听器
        metalItem.addActionListener(flavorLister);
        nimbusItem.addActionListener(flavorLister);
        windowsItem.addActionListener(flavorLister);
        classicItem.addActionListener(flavorLister);
        motifItem.addActionListener(flavorLister);

        pop.add(metalItem);
        pop.add(nimbusItem);
        pop.add(windowsItem);
        pop.add(classicItem);
        pop.add(motifItem);

        //调用ta组件的setComponentPopupMenu即可设置右键菜单,无需使用事件
        ta.setComponentPopupMenu(pop);

        // 设置关闭窗口时推出程序
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置jFrame最佳大小并可见
        f.pack();
        f.setVisible(true);


    }

    //定义一个方法,用于改变界面风格
    private void changeFlavor(String command) throws Exception{
    
    
        switch (command){
    
    
            case "Metal 风格":
                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                break;
            case "Nimbus 风格":
                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
                break;
            case "Windows 风格":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                break;
            case "Windows 经典风格":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
                break;
            case "Motif 风格":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                break;
        }

        //更新f窗口内顶级容器以及所有组件的UI
        SwingUtilities.updateComponentTreeUI(f.getContentPane());
        //更新mb菜单条及每部所有组件UI
        SwingUtilities.updateComponentTreeUI(mb);
        //更新右键菜单及内部所有菜单项的UI
        SwingUtilities.updateComponentTreeUI(pop);
    }


    public static void main(String[] args) {
    
    
        new Dome1().init();
    }

}

实战2

package swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

public class Dome2 {
    
    

    JFrame f =new JFrame();

    Icon okIcon = new ImageIcon("src/main/java/img/list/弄玉.gif");

    //文本域

    JTextArea ta =new JTextArea(8,20);

    //按钮

    JButton jb =new JButton("确认",okIcon);

    //定义一个ButtonGroup,把选择集成
    ButtonGroup bg  = new ButtonGroup();

    //定义单选框

    JRadioButton b1 =new JRadioButton("按钮1");
    JRadioButton b2 =new JRadioButton("按钮2");

    //定义一个菜单

    JMenuBar jMenuBar =new JMenuBar();

    JMenu look =new JMenu("查看");

    JMenu suoFang =new JMenu("缩放");

    JRadioButtonMenuItem zhuangTai =new JRadioButtonMenuItem("状态栏",false);


    JMenuItem big =new JMenuItem("放大");

    JMenuItem small =new JMenuItem("缩小");
    JMenuItem recover =new JMenuItem("恢复默认缩放");


    //设置菜单单选组


    //定义一个右键菜单,用于设置程序的外观风格
    JPopupMenu pop = new JPopupMenu();

    ButtonGroup menuBj =new ButtonGroup();

    JRadioButtonMenuItem item1 =new JRadioButtonMenuItem("选择1",true);
    JRadioButtonMenuItem item2 =new JRadioButtonMenuItem("选择2");
    JRadioButtonMenuItem item3 =new JRadioButtonMenuItem("选择3");
    JRadioButtonMenuItem item4 =new JRadioButtonMenuItem("选择4");














    public void init(){
    
    

        Box top = Box.createHorizontalBox();

        top.add(ta);
        top.add(jb);

        f.add(top, BorderLayout.NORTH);

        bg.add(b1);
        bg.add(b2);


        Box bottom = Box.createVerticalBox();

        bottom.add(b1);
        bottom.add(b2);

        f.add(bottom);

        //添加菜单.


        look.add(suoFang);
        look.add(zhuangTai);

        suoFang.add(big);
        suoFang.add(small);
        suoFang.add(recover);

        jMenuBar.add(look);

        //设置快捷键
        big.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.CTRL_MASK));


        //状态栏上要有一个单选框
//        menuBj.add(zhuangTai);

        f.setJMenuBar(jMenuBar);



        //设置右键菜单

        menuBj.add(item1);
        menuBj.add(item2);
        menuBj.add(item3);
        menuBj.add(item4);


        pop.add(item1);
        pop.add(item2);
        pop.add(item3);
        pop.add(item4);

        //setComponentPopupMenu即可设置右键菜单
        ta.setComponentPopupMenu(pop);


        //设置事件

        jb.addActionListener((e -> {
    
    
            String command = e.getActionCommand();
            System.out.println("点击了: "+command);
        }));

        big.addActionListener((e -> {
    
    
            System.out.println("放大~~~~~");
        }));



        // 设置关闭窗口时推出程序
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
    
    
        new Dome2().init();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42794826/article/details/110942718
今日推荐