Swing实践总结

本文总结了使用Swing创建GUI界面的经验,包括无事件的简单布局设计,如JFrame、JScrollPane和JPanel的使用。还介绍了如何处理点击事件进行文件上传或选择,并提供了附录,包含代码示例、概念解释和常用设置。
摘要由CSDN通过智能技术生成

Swing实践总结:

情景:需要用eclipse写一个gui的界面,不需要太复杂,简单的布局显示和点击事件上传或者是选择文件的功能就okay。

无事件的简单布局:

备注知识:

主要就是实例JFrame,控制JFrame的位置,然后不断往JFrame里一直塞其他控件,
JFrame->JScrollPane ->JPane->Jtutton,Jlist等等,前面的可以装后面的任意一种

JFrame 的默认布局是(BorderLayout,东西南北中)

JPane的默认布局是(FlowLayout,一个接一个排,排不下了换行/换列)

还有无论什么布局,看完后记得多看几遍你的每个控件所在位置,很多bug你会发现是控件在位置上相互遮挡甚至是相互覆盖造成的

以及如果你设置了JScrollPane一层,记得也要给JScrollPane设置setBounds,不然会看不到滚动条

JLabel 不仅可以放文字也可以放图片,有时候在太长了放不下怎么办,可以尝试用HTML语法“只要嵌入”他就会自动换行,但是对于数字你必须还要嵌入
才可以换行。

JFrame->JScrollPane ->JPane 这三个是容器,你对容器里的容器或者控件设置setBounds(x位置,y位置,宽,高),他的xy其实是相对父容器的

JFrame jframe = new JFrame(title);// 实例化一个JFrame,“title”是最后显示框的显示
        JPanel apk1_JPane_UpLoad = new JPanel(); // 选择第一个按钮的jpanel
        JPanel apk2_JPane_UpLoad = new JPanel(); // 选择第二个按钮的jpanel
        JPanel apk_JPane_Show = new JPanel();// 展示数据的时候的jpanel
        jframe.setLayout(null);//把布局置空后面才能用绝对布局s
        jframe.add(apk1_JPane_UpLoad);
        jframe.add(apk2_JPane_UpLoad);

    // 添加滚动条
        JScrollPane apk_JScrollPane_Show = new JScrollPane(apk_JPane_Show);
        jframe.add(apk_JScrollPane_Show);

        apk1_JPane_UpLoad.setBounds(200, 10, 400, 80);
        apk2_JPane_UpLoad.setBounds(630, 10, 400, 80);
        apk2_JPane_UpLoad.setLayout(null);
        apk1_JPane_UpLoad.setLayout(null);
        apk_JPane_Show.setLayout(null);
        apk_JPane_Show.setBounds(10, 100, 1180, 850);
        apk_JPane_Show.setPreferredSize(new Dimension(1180, 850));//对于jpanel记得设置setPreferredSize
        apk_JScrollPane_Show.setBounds(10, 100, 1180, 850);

//=======================下面的init都是把面板传进去,然后设置一些子控件===========
        initVersion(apk_JPane_Show);
        initSize(apk_JPane_Show);
        initPackageName(apk_JPane_Show);
        initPermission(apk_JPane_Show);
        initApk1Select(apk1_JPane_UpLoad);
        initApk2Select(apk2_JPane_UpLoad);


        jframe.setVisible(true);// 可见
        jframe.setSize(1200, 990);// 窗体大小
        jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// close的方式

    //=====下面是为了让屏幕显示在正中间========================
        int windowWidth = jframe.getWidth(); // 获得窗口宽
        int windowHeight = jframe.getHeight(); // 获得窗口高
        Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
        Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
        int screenWidth = screenSize.width; // 获取屏幕的宽
        int screenHeight = screenSize.height; // 获取屏幕的高
        jframe.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2 - windowHeight / 2);

    jframe.setResizable(false);//设置窗口不允许用户去拉大拉小

点击时间文件上传或者是选择

首先JButton注册点击事件


//apk1_JButton_UpLoad是一个JButton按钮
apk1_JButton_UpLoad.addMouseListener(new MouseAdapter() { // 添加鼠标点击事件
            public void mouseClicked(MouseEvent event) {
                eventOnImport(new JButton(), FLAG_APK1);//在点击事件里随意添加自己的逻辑
        }); // 文件上传功能

具体的上传逻辑,如果我们不想要上传只想要选择,也可以,在得到fileName的地方其实我们已经get到这个file了,我们可以用file的getAbsolutePath()方法,就可以得到路径了,我们可以在任何需要的地方去用inputstream去读取这个File文件,所以我们可以删掉后面的输入输出部分的代码。


/**
     * 文件上传功能
     *
     * @param apk_JButton_UpLoad
     *            按钮控件名称
     */
    public static void eventOnImport(JButton apk_JButton_UpLoad, String flag) {
        JFileChooser chooser = new JFileChooser();//文件选择器
        chooser.setMultiSelectionEnabled(true);
        /** 过滤文件类型 * */
        FileNameExtensionFilter filter = new FileNameExtensionFilter("war", "xml", "txt", "doc", "docx", "zip", "apk");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(apk_JButton_UpLoad);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            /** 得到选择的文件* */
            File[] arrfiles = chooser.getSelectedFiles();
            if (arrfiles == null || arrfiles.length == 0) {
                return;
            }
            FileInputStream input = null;
            FileOutputStream out = null;
            String path = "./";//设置存储的位置是当前项目的上一层
            String fileName = "";
            try {
                for (File f : arrfiles) {
                    File dir = new File(path);
                    fileName = f.getName();//这里得到的是文件的名字
                    /** 目标文件夹 * */
                    File[] fs = dir.listFiles();
                    HashSet<String> set = new HashSet<String>();
                    for (File file : fs) {
                        set.add(file.getName());//这里得到的不是

                    }
          
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值