Use Swing to create GUI(图形用户界面)

一.程序入口

package p1;

import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class EnterClass 
{
    public static void createGUI() {
        JFrame frame=new JFrame("阿冲");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        Container contentPane=frame.getContentPane();
        contentPane.setLayout(new FlowLayout());
        
        contentPane.add(new JLabel("123"));
        
        frame.setSize(600,600);
        frame.setVisible(true);
    }
    
    public static void createGUI2() {
        //JFrame frame=new MyFrame("阿冲");//
//        JFrame frame=new MouseFrame("阿冲");
//        JFrame frame=new BarFrame("阿冲");
        JFrame frame=new DialogFrame("阿冲");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.setSize(570,570);
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() 
            {
                //createGUI();
                createGUI2();
            }
        });
    }
}
 

 二.自定义Frame

1.加入基本控件MyFrame

package p1;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import af.swing.image.AfImageView;

public class MyFrame extends JFrame
{
    public MyFrame(String title)
    {
        //设置标题
        super.setTitle(title);
        
        //容器对象
        Container container=getContentPane();
        
        //布局管理器
//        LayoutManager layout=new FlowLayout(FlowLayout.CENTER);//流布局对象
//        LayoutManager layout=new BorderLayout();//边界布局对象
//        LayoutManager layout=new BoxLayout(container,BoxLayout.Y_AXIS);//盒布局对象
//        container.setLayout(layout);//容器设置布局对象
        
        //不设置布局管理器,手动布局
//        container.setLayout(null);
//        JLabel j=new ColorfulLabel("123",Color.blue);
//        j.setBounds(new Rectangle(200,100,200,200));//设置界限
//        container.add(j);
        
        
        //Box是一个JComponent,内部已经使用了BoxLayout
//        Box box=Box.createVerticalBox();
//        Box line1=Box.createHorizontalBox();
//        Box line2=Box.createHorizontalBox();
//        //line1.setOpaque(true);//设置不透明
//        //line1.setBackground(Color.BLUE);//设置背景色
//        box.add(Box.createVerticalStrut(10));//设置竖直固定间距
//        box.add(line1);
//        box.add(line2);
//        box.add(Box.createVerticalGlue());
//        container.add(box); 
        
        //创建边框
        //Border border=BorderFactory.createLineBorder(Color.BLUE,4);//BorderFactory工具类
//        Border border=new LineBorder(Color.BLUE,4);
        //复合边框
//        Border border2=BorderFactory.createLineBorder(Color.GREEN,4);
//        Border border3=BorderFactory.createLineBorder(Color.RED,4);
//        Border compound=BorderFactory.createCompoundBorder(border,border2);
//        Border compound2=BorderFactory.createCompoundBorder(compound,border3);
//        box.setBorder(compound2);
        
        //边距与填充
//        Border margin=BorderFactory.createEmptyBorder(20,20,20,20);//边距
//        Border titleBorder=BorderFactory.createTitledBorder("标题边框");
//        Border padding=BorderFactory.createEmptyBorder(40,40,40,40);//填充
//        Border compound=BorderFactory.createCompoundBorder(margin,titleBorder);
//        Border compound2=BorderFactory.createCompoundBorder(compound,padding);
//        box.setBorder(compound2);
        
        //卡片布局
//        container.setLayout(new BorderLayout());
//        JPanel cards=new JPanel();
//        JPanel card1=new JPanel();
//        JPanel card2=new JPanel();
//        cards.add(card1,"卡片一");
//        cards.add(card2,"卡片二");
//        container.add(cards);
//        CardLayout cl = (CardLayout) cards.getLayout();
//        cl.show(cards, "卡片一");
//        
        //标签用于显示短文本或图标
//        JLabel jlabel=new JLabel("标签");//标签对象
//        container.add(jlabel);//容器添加标签
        
//        JButton jbutton=new JButton("按钮");//按钮对象
//        container.add(jbutton);//容器添加按钮
//        
//        JLabel timelabel=new JLabel();
//        container.add(timelabel);//添加显示时间的标签
//        timelabel.setText(SwingSmallToolClass.showtime());//标签设置初始时间
//        
//        //创建监听器对象
//        ActionListener actionlistener=new ActionListener() {
//            
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                
//                System.out.println("按钮被点击");
//            }
//        };
//        
//        jbutton.addActionListener(actionlistener);//按钮添加监听器
//        //匿名内部类添加监听器
//        jbutton.addActionListener(new ActionListener() {
//            
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                System.out.println("匿名内部类添加监听器");
//            }
//        });
//        //Lambda表达式添加监听器
//        jbutton.addActionListener((e)->{
//            timelabel.setText(SwingSmallToolClass.showtime());//标签刷新时间
//            System.out.println("Lambda表达式添加监听器");
//        });
        
        //创建文本框
//        TextField textfield=new TextField(16);
//        container.add(textfield);
//        //textfield.setEnabled(false);文本框禁用
//        
//        jbutton.addActionListener((e)->{
//            JOptionPane.showMessageDialog(this,textfield.getText());
//        });
        
        //创建复选框
//        JCheckBox jcheckbox=new JCheckBox("复选框");
//        container.add(jcheckbox);
        
        //下拉列表
//        JComboBox<String> jcombobox=new JComboBox<>();
//        jcombobox.addItem("选项一");
//        jcombobox.addItem("选项二");
//        jcombobox.addItem("选项三");
//        String str=(String)jcombobox.getSelectedItem();//获取文本
        
        //彩色标签
//        JLabel l1=new ColorfulLabel("l1", Color.blue);
        
        //创建密码框
//        JPasswordField passwordfield=new JPasswordField(20);//显示长度20
        
        //图标,支持jpg/jpeg/png
        //URL url=getClass().getResource("/picture/yuandan.png");
        //Icon icon=new ImageIcon(url);
//        SwingSmallToolClass s=new SwingSmallToolClass();
//        Icon icon=s.getIcon("/picture/yuandan.png");
//        JLabel iconLabel=new JLabel();
//        iconLabel.setIcon(icon);
//        box.add(iconLabel);
        
        //自定义控件
        LayoutManager layout=new BorderLayout();//边界布局对象
        container.setLayout(layout);//容器设置布局对象
        MyPanel mp=new MyPanel();
        container.add(mp,BorderLayout.CENTER);
        
//        container.setLayout(new BorderLayout());//容器设置布局对象
//        JSpinner spinner=new JSpinner(new SpinnerNumberModel(3, 1, 5, 1));//初始值,最大值,最小值,每次调节值
//        container.add(spinner,BorderLayout.PAGE_START);
//        //添加监听器
//        ChangeListener changelistener=new ChangeListener() {
//            public void stateChanged(ChangeEvent e) {
//                System.out.println("changelistener");
//            }
//        };
//        spinner.addChangeListener(changelistener);
        
        //添加图片
//        container.setLayout(new BorderLayout());
//        //自定义面板进行图片插入
//        AfImageView imageView=new AfImageView();
//        container.add(imageView,BorderLayout.CENTER);
//        imageView.setScaleType(AfImageView.FIT_CENTER_INSIDE);//设置缩放格式
//        imageView.setBgColor(Color.blue);//设置背景色
//        URL imageUrl = MyFrame.class.getResource("/picture/im_j20.jpg");
//        try {
//            Image image=ImageIO.read(imageUrl);
//            imageView.setImage(image);//设置图片
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        
    }

}

2.鼠标反应MouseFrame

package p1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

import af.swing.AfPanel;
import af.swing.image.AfImageView;
import af.swing.layout.AfRowLayout;

public class MouseFrame extends JFrame {
    AfImageView CenterPicture = new AfImageView();
    List<PictureButton> buttons = new ArrayList<>();

    public MouseFrame(String title) {
        super.setTitle(title);

        // 内容面板
        JPanel root = new JPanel();
        this.setContentPane(root);
        root.setLayout(new BorderLayout());

        // 主图
        CenterPicture.setBackground(Color.WHITE);
        CenterPicture.setScaleType(AfImageView.FIT_CENTER);
        CenterPicture.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.BLUE));
        root.add(CenterPicture, BorderLayout.CENTER);

        // 辅图
        AfPanel PBar = new AfPanel();
        PBar.layout(new AfRowLayout(10));
        PBar.padding(10).preferredHeight(80);
        root.add(PBar, BorderLayout.PAGE_START);

        // 共用一个事件监听器
        ThumbClickListener clickListener = new ThumbClickListener();

        // 加载 picture 文件夹下的图片 ( 本地文件方式 )
        File imageDir = new File("picture");
        File[] imageFiles = imageDir.listFiles();
        for (File f : imageFiles) {
            PictureButton button = new PictureButton(f);
            PBar.add(button, "auto");
            buttons.add(button);

            button.setPreferredSize(new Dimension(80, 80));
            button.setBgColor(Color.WHITE);
            button.setBorder(BorderFactory.createLineBorder(Color.white, 3));

            // 添加事件监听器
            button.addMouseListener(clickListener);
        }

        // *************************************************************//
        // Container container=getContentPane();
        // container.setLayout(new BorderLayout());
        // JPanel jpanel=new JPanel();
        // container.add(jpanel);

        // jpanel.addMouseListener(new MouseAdapter() {
        //
        // @Override
        // public void mouseClicked(MouseEvent e) {
        // if(e.getButton()==MouseEvent.BUTTON1)
        // System.out.println("左键");else
        // if(e.getButton()==MouseEvent.BUTTON2)
        // System.out.println("中键");else
        // if(e.getButton()==MouseEvent.BUTTON3)
        // System.out.println("右键");
        //
        // int num=e.getClickCount();
        // if(num==1) System.out.println("单击");
        // if(num==2) System.out.println("双击");
        //
        // System.out.println("鼠标位置"+e.getX()+","+e.getY());
        // }
        //
        // });

        // jpanel.addMouseListener(new MouseListener() {
        //
        // @Override//鼠标抬起
        // public void mouseReleased(MouseEvent e) {
        // // TODO Auto-generated method stub
        //
        // }
        //
        // @Override//鼠标按下
        // public void mousePressed(MouseEvent e) {
        // // TODO Auto-generated method stub
        //
        // }
        //
        // @Override//鼠标退出
        // public void mouseExited(MouseEvent e) {
        // // TODO Auto-generated method stub
        //
        // }
        //
        // @Override//鼠标进入
        // public void mouseEntered(MouseEvent e) {
        // // TODO Auto-generated method stub
        //
        // }
        //
        // @Override//点击
        // public void mouseClicked(MouseEvent e) {
        // if(e.getButton()==MouseEvent.BUTTON1)
        // System.out.println("左键");else
        // if(e.getButton()==MouseEvent.BUTTON2)
        // System.out.println("中键");else
        // if(e.getButton()==MouseEvent.BUTTON3)
        // System.out.println("右键");
        //
        // int num=e.getClickCount();
        // if(num==1) System.out.println("单击");
        // if(num==2) System.out.println("双击");
        //
        // System.out.println("鼠标位置"+getX()+","+getY());
        //
        // }
        // });

    }

    private class ThumbClickListener extends MouseAdapter {
        @Override
        public void mouseClicked(MouseEvent e) {
            // 被点击的按钮
            PictureButton source = (PictureButton) e.getSource();

            // 点击的按钮:显示蓝色高亮边框
            // 其他按钮:白色普通边框
            for (PictureButton button : buttons) {
                if (button == source) {
                    button.setBorder(BorderFactory.createLineBorder(new Color(0x1E9FFF), 3));
                } else {
                    button.setBorder(BorderFactory.createLineBorder(Color.white, 3));
                }
            }

            // 中间区域: 显示大图
            CenterPicture.setImage(source.image);
        }

    }
}
 

3.对话框DialogFrame

package p1;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DialogFrame extends JFrame {
    public DialogFrame(String title) {
        this.setTitle(title);

        JPanel root = new JPanel();
        this.setContentPane(root);
        root.setLayout(new FlowLayout());

        JTextField textField = new JTextField(20);
        JButton button = new JButton("测试");
        root.add(textField);
        root.add(button);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                test4();
            }
        });
    }

    // 简单消息提示框
    private void test1() {
        JOptionPane.showMessageDialog(this, "操作已经完成!");
        System.out.println("test1 exit");
    }

    // 简单确认输入框
    private void test2() {
        int select = JOptionPane.showConfirmDialog(this, "是否确认删除?", "确认", JOptionPane.YES_NO_OPTION);

        // select 为用户点的第几个按钮
        if (select == 0) {
            System.out.println("模拟执行数据删除操作...");
            System.out.println("删除完成");
        }

        System.out.println("test2 exit");
    }

    // 简单数据输入框
    private void test3() {
        String input = JOptionPane.showInputDialog(this, "请输入你的身份证号\n (字母以X代替)", "0000");
        if (input != null) {
            System.out.println("输入的号码为: " + input);
        }
        System.out.println("test3 exit");
    }

    // 简单选项对话框
    private void test4() {
        Object[] colors = { "红色", "绿色", "蓝色" };
        String select = (String) JOptionPane.showInputDialog(this, "你最喜欢的颜色", "请选择", JOptionPane.PLAIN_MESSAGE, null,
                colors, "红色");
        if (select != null) {
            System.out.println("选择了: " + select);
        }
        System.out.println("test4 exit");
    }
}

4.待续......

猜你喜欢

转载自blog.csdn.net/SignalFire/article/details/111595260