精华内容
下载资源
问答
  • JAVA桌面UI编程之布局管理器

    千次阅读 2017-04-26 23:51:51
    布局管理器为了跨平台java引入了布局管理器来管理界面,JAVA一共有6种布局管理器,下面是介绍BorderLayout界面分东西南北中5个方向,最多只能显示5个控件,默认放入中间,下面的程序将panel和panel2放在了中间和南边。...

    布局管理器

    为了跨平台java引入了布局管理器来管理界面,JAVA一共有6种布局管理器,下面是介绍

    BorderLayout

    界面分东西南北中5个方向,最多只能显示5个控件,默认放入中间,下面的程序将panel和panel2放在了中间和南边。放在中间的空间大小默认有内容大小为剩余的部分,不可设置。就如下面的程序,不能设置panel2的大小
    this.getContentPane().add(panel,BorderLayout.SOUTH);
    this.getContentPane().add(panel2,BorderLayout.CENTER);

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class BorderFrame extends JFrame{
        JButton btOK = new JButton("OK");
        JButton btNO = new JButton("NO");
    
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        public BorderFrame(){
            this.getContentPane().add(panel,BorderLayout.SOUTH);
            this.getContentPane().add(panel2,BorderLayout.CENTER);
            panel2.setBackground(Color.black);
            panel2.setSize(100,200);
            this.setBackground(Color.red);
            panel.add(btOK);
            panel.add(btNO);
            panel.setBackground(Color.blue);
            this.setSize(300,200);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BorderFrame frame = new BorderFrame();
    
        }
    
    }

    这里写图片描述

    FlowLayout

    看作行集,行高不能用setSize设置,由内容决定,可以设置左中右居,还有。就如上面的程序,panel不能设置大小,panel2也不能,之所有有这么大是因为发在了BorderLayout有东西填充。若将panel2放在上边,效果如下
    this.getContentPane().add(panel2,BorderLayout.NORTH);
    这里写图片描述
    放在左边效果有如下 :
    this.getContentPane().add(panel2,BorderLayout.WEST);
    这里写图片描述

    GridLayout

    网格管理器,把容器的显示位置化格子,然后把控件放到等宽等高的格子,

    GridLayout layout = new GridLayout(行数,列数);
    //  当行数为0时,增加控件时会保持一个列的情况下随控件增长;列数为0时亦是如此。但不能同时为0
    

    一个对话框例子

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    import java.awt.event.*;
    
    public class LoginDialogDemo extends JFrame {
        JButton button = new JButton("Click Me");
        JPanel panel = new JPanel(new FlowLayout());
    
        public LoginDialogDemo(){
            final JFrame frame = this;
            // BorderLayout管理器
            this.getContentPane().add(panel, BorderLayout.SOUTH);
            panel.add(button);
    
            button.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    showLoginDialog(frame);
                }
            });
    
            this.setSize(400,200);
            this.setTitle("显示登陆对话框");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    
        void showLoginDialog(JFrame frame){
            // gridLayout自增
            JPanel p = new JPanel(new GridLayout(0,1));
            JTextField tfUserName = new JTextField();
            JPasswordField tfPassword = new JPasswordField();
            p.add(new JLabel("Username:"));
            p.add(tfUserName);
            p.add(new JLabel("Password:"));
            p.add(tfPassword);
            if(JOptionPane.showConfirmDialog(frame,
                                            p,
                                            "Login",
                                            JOptionPane.OK_CANCEL_OPTION,
                                            JOptionPane.PLAIN_MESSAGE)==
                                            JOptionPane.OK_OPTION){
                System.out.println("User Name:"+tfUserName.getText());
                System.out.println("Password:"+new String(tfPassword.getName()));
            }
    
        }
    
        public static void main(String[] args){
            LoginDialogDemo frame = new LoginDialogDemo();
        }
    }

    这里写图片描述
    这里写图片描述

    BoxLayout

    允许控件按X/Y抽摆放。

    public BoxLayout(Container target,int axis) 
    // target表示当前管理的容器,若为this则管理自己所在的容器
    import java.awt.TextArea;
    
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    public class BoxLayoutFrame extends JFrame{
        BoxLayoutTest panel = new BoxLayoutTest();
        public BoxLayoutFrame(){
            this.getContentPane().add(panel);
            this.setSize(500,500);
            this.setTitle("测试界面布局");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BoxLayoutFrame frame = new BoxLayoutFrame();
        }
    
    }
    
    class BoxLayoutTest extends JPanel{
        BoxLayoutTest(){
            //set the layout to a X-axis BoxLayout
            setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
    
            //Create three components
            JTextField textField = new JTextField();  //单行文本输入框
            // JTextArea构造具有指定行数和列数的新的空 TextArea。
            TextArea textArea = new TextArea(4,20);  
            JButton button = new JButton("this is a Button");
    
            //add the three components to the BoxLayouts
            add(new JLabel("TextField:"));
            add(textField);
            add(new JLabel("TextArea:"));
            add(textArea);
            add(new JLabel("button:"));
            add(button);
        }
    }

    CardLayout

    CardLayout布局,某个界面像放动画一样贴换内容。比如实现一个界面内多个

    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.EventQueue;
    import java.awt.FlowLayout;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JButton;
    import javax.swing.BoxLayout;
    import java.awt.Panel;
    import java.awt.event.*;
    
    public class CardLayoutFrame extends JFrame {
    
        JButton btnPrevious = new JButton("Previous");
        JButton btnNext = new JButton("Next");
    
        JPanel panelFlow = new JPanel(new FlowLayout());
        JPanel panelCard = new JPanel(new CardLayout());
        int currentIndex = 0;
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        CardLayoutFrame frame = new CardLayoutFrame();
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        /**
         * Create the frame.
         */
        public CardLayoutFrame() {
            this.getContentPane().add(panelFlow, BorderLayout.SOUTH);
            this.getContentPane().add(panelCard,BorderLayout.CENTER );
            panelCard.add(createCard(1), "Card1");
            panelCard.add(createCard(2), "Card2");
            panelFlow.add(btnPrevious);
            panelFlow.add(btnNext);
    
            ActionListener listener = new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    switchCard();
                };
            };
    
            btnPrevious.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    switchCard();
                };
            });
            btnNext.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    switchCard();
                };
            });
    
            this.setSize(300,200);
            this.setTitle("测试界面布局");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    
        // 生产卡片
        JPanel createCard(int Index){
            JPanel panel = new JPanel(new BorderLayout());
            JLabel label = new JLabel("<html><h1 style = color:red>"+
            "This is Panel"+ Index+"</h1></html>");
    
            label.setHorizontalAlignment(JLabel.CENTER);
            panel.add(label);
    
            return panel;
        }
    
        void switchCard(){
            CardLayout c1 = (CardLayout) panelCard.getLayout();
            if(currentIndex == 0){
                currentIndex ++;
                c1.show(panelCard, "Card2");
            }else{
                currentIndex--;
                c1.show(panelCard, "Card1");
            }
        }
    }
    

    这里写图片描述

    GridBagLayout

    每个加入容器的控件创建一个GridBagConstraints对象,下面分析这个对象的构造函数的参数

    public GridBagConstraints(
        int gridx,int gridy,   //控件的位置,单位为网格
        int gridwidth,int gridheight,  // 组件占几列几行
        double weightx,double weighty,  // 水平和垂直拉伸权值
        int anchor,  // 停靠方向,默认CENTER,有NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST等
        int fill,  // 拉伸的方向,有NONE,HORIZONTAL,VERTICAL
        insets insets(上,左,下,右),  // 外部填充,填充的区域是组件与所处格子边框之间的部分。 当组件不能填满其格时,通过 insets来指定四周(即上下左右)所留空隙
        int ipadx,ipady  //  组件间的横纵向间距
    )
    
    

    一个单例使用实例

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.FlowLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
    
    public class GridBagLayoutFrame extends JFrame {
    
        JButton btnOK = new JButton("OK");
        JButton btnCancel = new JButton("Cancel");
        JPanel panelFlow = new JPanel(new FlowLayout());
        JPanel panelGrid;
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        GridBagLayoutFrame frame = new GridBagLayoutFrame();
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        /**
         * Create the frame.
         */
        public GridBagLayoutFrame() {
            panelGrid = createPanelGridBag();
            this.getContentPane().add(panelFlow, BorderLayout.SOUTH);
            this.getContentPane().add(panelGrid,BorderLayout.CENTER);
            panelFlow.add(btnOK);
            panelFlow.add(btnCancel);
    
            this.setTitle("测试界面");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.pack();   //窗口自适应组件大小
            this.setVisible(true);
    
        }
    
        JPanel createPanelGridBag(){
            JPanel panelGridBag = new JPanel(new GridBagLayout());
            JLabel label1 = new JLabel();
            JLabel label2 = new JLabel();
            JLabel label3 = new JLabel();
            JLabel label4 = new JLabel();
    
            JTextField textField1 = new JTextField();
            JTextField textField2 = new JTextField();
            JTextField textField3 = new JTextField();
            JTextField textField4 = new JTextField();
    
            label1.setText("User Name:");
            label2.setText("Telephone:");
            label3.setText("Address:");
            label4.setText("Company:");
    
            textField1.setText("Your Name");
            textField2.setText("88888888");
            textField3.setText("Shanghai,China");
            textField4.setText("Your company");
    
    //      Insets(int top, int left, int bottom, int right) 
    //      创建并初始化具有指定顶部、左边、底部、右边 inset 的新 Insets 对象。
            panelGridBag.add(label1,
                    new GridBagConstraints(0,0,1,1,0.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.NONE,
                            new Insets(45, 50, 0, 0),20,0
                            )
                    );
            panelGridBag.add(label2,
                    new GridBagConstraints(0,1,1,1,0.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.NONE,
                            new Insets(34,50,0,0),20,0
                            )
                    );
            panelGridBag.add(label3,
                    new GridBagConstraints(0,2,1,1,0.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.NONE,
                            new Insets(28,50,0,0),33,0
                            )
                    );
            panelGridBag.add(label4,
                    new GridBagConstraints(0,3,1,1,0.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.NONE,
                            new Insets(28,50,50,0),26,0
                            )
                    );
    
    
            panelGridBag.add(textField1,
                    new GridBagConstraints(1,0,1,1,1.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,
                            new Insets(44,25,0,84),97,0
                            )
                    );
            panelGridBag.add(textField2,
                    new GridBagConstraints(1,1,1,1,1.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,
                            new Insets(31,25,0,84),97,0
                            )
                    );
            panelGridBag.add(textField3,
                    new GridBagConstraints(1,2,1,1,1.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,
                            new Insets(25,25,0,84),97,0
                            )
                    );
    
            panelGridBag.add(textField4,
                    new GridBagConstraints(1,3,1,1,1.0,0.0,
                            GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,
                            new Insets(26,25,50,84),97,0
                            )
                    );
    
            return panelGridBag;
        }
    
    }
    

    这里写图片描述

    难点: weightx,weighty
    在书上看到这两个值设为[0,1],然后自个好奇就随便调了几个值,结果UI依然不受影响,然后通过查阅才知道其实这两个值得取值无限制,只要合理即可,每个组件的这两个值还与其他因素有关。详细请看论文
    java的拉伸作用规则:
    1. 跨多个格子且是第一列(行)则作用于最右(下)边的格子;若非出现在第一行或列且weight为0,则作用于最右下格子,否则按比例值(某个x或y上所有某个weight占总weight的值)拉伸。
    2. 拉伸值为0时不一定不能拉伸,只要所在行存在拉伸对象,就能跟着拉伸。

    下面给出论文中的一个源码:

    import java.awt.*;
    
    import javax.swing.*;
    
    public class DWPMessGrigBag extends JFrame {
    
        JButton Ding,Wei,Ping,Exit,Help;
        JLabel address,family;
        JPanel panel;
        JTextField textField,mousePosition;
        JList familyList,addrList;
        JTextArea textArea;
    
        /**
         * Create the frame.
         */
        public DWPMessGrigBag() {
            Ding = new JButton("丁");
            Wei = new JButton("卫");
            Help = new JButton("帮助");
            Ping = new JButton("平");
    
            family = new JLabel("丁家成员");
            address = new JLabel("地址信息");       
            String[] str = {"丁卫平","张燕","丁培桓"};
            String[] addstr = {"湖南","桃花","灰山港"};
    
            textField = new JTextField();
            textField.setBackground(Color.green);
            mousePosition = new JTextField();
            Exit = new JButton("退出");
            familyList = new JList(str);
            familyList.setBackground(Color.yellow);
            addrList = new JList (addstr);
            addrList.setBackground(Color.green);
            textArea = new JTextArea();
            textArea.setBackground(Color.lightGray.brighter());
            GridBagLayout layout = new GridBagLayout();
            this.setLayout(layout);
            GridBagConstraints s = new GridBagConstraints();
            s.fill = GridBagConstraints.BOTH;
    
    
            s.gridwidth = 1;
            s.weightx = 0;
            s.weighty = 0;
            layout.setConstraints(Ding,s);
            layout.setConstraints(Wei,s);
            layout.setConstraints(Ping,s);
    
            s.gridx = 4;
            s.gridy = 0;
            layout.setConstraints(Help, s);
    
            s.gridx = 0;
            s.gridy = 1;
            s.gridwidth = 2;
            layout.setConstraints(family, s);
    
            s.gridx = 2;
            s.gridy = 1;
            s.weightx = 13;
            layout.setConstraints(textField, s);
    
            s.gridx = 4;
            s.gridwidth = 1;
            s.weightx = 0;
            layout.setConstraints(Exit, s);
    
            s.gridx = 0;
            s.gridy = 2;
            s.gridwidth = 2;
            s.weightx = 0;
            s.weighty = 90;
            layout.setConstraints(familyList, s);
    
            s.gridx = 2;
            s.gridheight = 4;
            s.gridwidth = 3;
            s.weightx = 31;
            s.weighty = 44;
            layout.setConstraints(textArea,s);
    
            s.gridx = 0;
            s.gridy = 3;
            s.gridwidth = 2;
            s.weightx = 0;
            s.weighty = 0;
            s.gridheight = 1;
            layout.setConstraints(address, s);
    
            s.gridy = 4;
            s.weighty = 30;
            layout.setConstraints(addrList, s);
    
            s.weighty = 0;
            s.gridy = 5;
            layout.setConstraints(mousePosition, s);
    
            this.add(Ding);
            this.add(Wei);
            this.add(Ping);
            this.add(Help);
    
            this.add(family);
            this.add(textField);
            this.add(Exit);
    
            this.add(familyList);
            this.add(textArea);
            this.add(address);
    
    
            this.add(addrList);
            this.add(mousePosition);
    
            this.setSize(600,600);
            this.setVisible(true);
    
        }
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        DWPMessGrigBag frame = new DWPMessGrigBag();
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
    

    这里写图片描述

    参考:
    《JAVA编程实践指南》,邵荣,清华大学出版社
    Java学习笔记之卡片式布局CardLayout
    GridBagLayout 以及 GridBagConstraints 用法
    GridBagConstrains类成员weightx和weighty的使用方法研究

    展开全文
  • 可否用純web控件做java桌面程序的UI?
  • 我知道他们有很多不同的方式来做到这一点,但我在与终端合作方面做得非常好,并且希望继续创建用户界面和桌面应用程序!我写了一个非常俗气而又杂乱的“数字游戏”,并且希望使它在一个带有按钮和所有爵士乐的小程序...

    我知道他们有很多不同的方式来做到这一点,但我在与终端合作方面做得非常好,并且希望继续创建用户界面和桌面应用程序!我写了一个非常俗气而又杂乱的“数字游戏”,并且希望使它在一个带有按钮和所有爵士乐的小程序中运行!

    public static void gameStart() {

    System.out.println("Welcome to the Game of Awesome V1.2");

    System.out.println("-------------------------------------");

    spin();

    }

    public static void spin() {

    int spinNum = (int)(10*Math.random());

    Scanner input = new Scanner(System.in);

    Scanner input2 = new Scanner(System.in);

    System.out.println("type a number between 1 and 10:");

    int guessNum = input.nextInt();

    if(guessNum > 10) {

    System.out.println(guessNum + " is greater than 10 you fool!");

    spin();

    }else if(guessNum < 1) {

    System.out.println(guessNum + " is less than 1 you fool!");

    spin();

    }else {

    System.out.println("\nSweet, looks like you chose [" + guessNum + "], good luck...");

    System.out.println("\ntype \"s\" to spin and \"quit\" to, quit...");

    String run = input2.nextLine();

    switch (run.toLowerCase()) {

    case "s":

    System.out.println("\nyou spun [" + spinNum + "] and guessed [" + guessNum + "]!");

    if(guessNum == spinNum) {

    win();

    askPlay();

    }else {

    lose();

    askPlay();

    }

    break;

    case "quit":

    System.out.println("See ya later!");

    System.out.println();

    System.exit(0);

    break;

    default:

    System.out.println("shit, you broke it! Luckily, I can fix this.");

    askPlay();

    System.out.println();

    break;

    }

    }

    }

    public static void askPlay() {

    Scanner input = new Scanner(System.in);

    System.out.println("\nWanna play again? (Type \"yes\" or \"no\")");

    String decideSpin = input.nextLine();

    switch (decideSpin.toLowerCase()) {

    case "yes":

    spin();

    break;

    case "no":

    System.out.println("\nI know it's a crappy game, thanks for playing though!");

    System.out.println();

    System.exit(0);

    break;

    default:

    System.out.println("\nI'm sorry,\nI was made by a lazy "

    + "programmer and can only understand \"yes\" or \"no\"..");

    askPlay();

    break;

    }

    }

    public static void win() {

    System.out.println("\nWINNER: you won this insanley stupid game, of awesome! Be proud, winner. (:");

    }

    public static void lose() {

    System.out.println("\nLOOOOOSSSSSEEEERRRR: yep, you stand with the majority with this loss.");

    }我怎样才能做到这一点?

    展开全文
  • 大家想到使用Java这门编程语言大多是脑海中是浮现的B/S开发,高并发、云计算、大数据等等,今天给大家带来的是Java不一样的使用方式——使用Java做PC桌面程序开发。 不同的是,之前Java是使用swing或者awt开发,...

    大家想到使用Java这门编程语言大多是脑海中是浮现的B/S开发,高并发、云计算、大数据等等,今天给大家带来的是Java不一样的使用方式——使用Java做PC桌面程序开发。

    不同的是,之前Java是使用swing或者awt开发,但是这次介绍给大家的是使用JavaFx做桌面程序开发。

    应该没有人使用过电脑版的QQ、酷狗、视频播放器等等软件,它们都有非常漂亮的UI,也就是界面。

    可是我们使用swing和awt开发出的桌面程序却是那么的“不好看”!所以今天就给大家介绍一个方便快捷且美观的Java桌面程序开发方式——JavaFx+JFoenix开发

    先看看一张效果图(来自JFoenix GitHub)

    如果你对这样美观的桌面程序感兴趣的话,请继续往下阅读..................

    JavaFx

    JavaFx使用方便快捷的Java代码配合FXML布局文件开发,做到视图和逻辑代码分开,形成一种方便、简洁、易懂的开发模式。

    • FXML文件用于布局
    • Controller用于编写FXML的初始化操作和逻辑操作(事件绑定、动态效果等等)
    • 使用CSS代码给FXML界面组件做效果

    如下图:

    • FXML
    • Controller 
    • CSS

    这样虽然开始简易、方便,但是界面依然不够美观漂亮。这时就需要使用到JFoenix。

    JFoenix

    JFoenix的github地址:https://github.com/jfoenixadmin/JFoenix    里边有demo、示例图等等

    官网地址  http://www.jfoenix.com/

    只需要在你的项目中使用JFoenix的jar包即可使用,然后在FXML设计器的Custom一栏下有JFOenix的所有组件。

    下边是JFoenix的界面效果图(来自GitHub),效果为Material Design风格:

    更多案例效果请看 https://github.com/jfoenixadmin/JFoenix

     

    熟练使用JavaFx+JFoenix,即可方便高效的开发出漂亮的Java桌面程序

    展开全文
  •  结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取。。。。  挺简单而且实用的一个项目,实现出来的效果也还不错。希望可以学到知识的小可爱不对应该是...

    BeautyJavaSwingRobot

      结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取。。。。
      挺简单而且实用的一个项目,实现出来的效果也还不错。希望可以学到知识的小可爱不对应该是帅哥,可以给我star。。。共勉 ,
    github(gayhub更准确?)项目地址 https://github.com/Snailclimb/BeautyJavaSwingRobot

    1,效果图:

    主要界面图

    主要界面

    机器人效果图

    机器人效果图

    身份证查询效果图

    身份证

    2,图形化界面万年历功能实现

    使用工具

    httpClient+jsoup
      简单介绍 :HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。(来自360百科,维基百科没这个名词?尴尬).jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。(来自360百科)

    httpClient使用方法

    (更多请参考博客:http://blog.csdn.net/wangpeng047/article/details/19624529/或者官网httpClient:http://hc.apache.org/httpcomponents-client-5.0.x/index.html
    使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
    1. 创建HttpClient对象。
    2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
    3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
    4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
    5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
    6. 释放连接。无论执行方法是否成功,都必须释放连接

    jsoup使用方法

    请参考:
    jsoup开发指南,jsoup中文使用手册,jsoup中文文档 :
    http://www.open-open.com/jsoup/
    Jsoup解析Html教程 | xdemo.org
    http://www.xdemo.org/jsoup-html-parse/
    Jsoup解析HTML实例及文档方法详解java脚本之家 http://www.jb51.net/article/43485.htm

    3,机器人功能实现

      图形界面我用JAVA SWING中的JDialog做的,本来是准备用android studio 做一个界面类似微信的聊天机器人的,因为之前嫌弃AS太占内存加上不想搞安卓了就卸载了,所以后面有时间再做,原理很简单,可以很方便移植到其他项目。
      robot.java(机器人功能类)中有一段这样的代码.下面的API是我自己申请的,可以去图灵官网上申请创建一个属于自己的机器人。下面有申请方法。

            // 接入机器人,输入问题
            String APIKEY = "401415ff3f1245e1a487a82974bb7307";
            String INFO = URLEncoder.encode(quesiton, "utf-8");// 这里可以输入问题
            String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO;
            URL getUrl = new URL(getURL);
            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
            connection.connect();

      先进入图灵官网,注册账号
    这里写图片描述
      创建属于自己的个性机器人后得到属于自己的API
    这里写图片描述
      这个API不仅可以用在这里,想网页中微信公众号等平台中都适用。

    4,身份证查询功能实现

      这个功能没啥说的,我的代码里一共有三个类。都做了详细的说明。你只需要提前知道身份证的数字代表的有特殊含义就行了。

    转载于:https://www.cnblogs.com/snailclimb/p/9086469.html

    展开全文
  • 最近要做一个小的原型系统, 因为NetBeans在Java的GUI编程方面比较给力,所以就准备用NetBeans开发一个桌面应用程序了事。在我拖拽一通之后,心想UI部分就OK了,结果一运行却发现界面看着特别别扭,后来才反应过来...
  • 在学Java的初期,其实很不情愿地学,这面向对象的语言还是和C语言似的,没有什么界面的呢,也不能在桌面上运行呢。...Java中有UI组件,如AWT组件和Swing组件,可以做出有按钮有下拉菜单和输入框的界面。这类的Jav...
  • 具有基于Electron和VaadinHTML 5 UIJava桌面应用程序。 用途 节点JS 电子 Gradle JDK 11 码头HTTP服务器 瓦丹14 产品特点 使用Gradle轻松构建 启用了Web套接字的Jetty服务器 纯Java的Vaadin UI代码 与Vaadin ...
  • WPF(Windows Presentation Foundation) 是微软推出的用于构建桌面客户端应用程序的 UI 框架,具有应用程序模型、控件、图形、布局、数据绑定和安全性等功能,属于 .NET Framework 3.0 的一部分。它提供了统一的编程...
  • java qt gui_Java桌面GUI库

    2021-02-13 01:36:19
    感觉用Java开发web app是非常普遍的,工具啊,库啊都非常丰富,那么如果用Java开发一个普通的桌面应用,有哪些GUI库可供选择呢?一、AWTAbstract Window Toolkit, 是Java中引入最早的GUI库,它是对native system的一...
  • 大家好,今天给大家带来使用java+html写winform win客户端桌面程序的教程。 在读本文之前你首先要能接受:1 客户端基于java+html所以 软件包中需要包含 jre和 cef(chrome内核)的dll,软件包比较大。2 因为jcef 国内...
  • 上周和朋友一块讨论想写个小的桌面应用程序,当时很来劲的,可当要写的时候,想到要使用javaAPI当中的awt和swing,不禁就犯愁了---学校学习的时候,一直对这两个包很有成见,感觉界面效果太差了。最后网上查了点资料...
  • PHP中文网2017-04-18 10:18:097楼桌面上使用类似XML布局的,现在有过气的DirectUI(C++),Qt的Qt ...Java桌面开发一般用Swing之类的写界面,用代码控制布局,一个是可能和系统风格不搭(Java有自己的Look and Fee...
  • java 桌面客户端开发

    2019-09-13 16:05:49
    话说eclipse ui最强开发插件swt-designer被google收购了,退出大神级别开源工具windowbuilder,用了一下果然很好用,官方网站是:https://developers.google.com/java-dev-tools/wbpro/?hl=zh-CN ...
  • 大家好,今天给大家带来使用java+html写winform win客户端桌面程序的教程。 在读本文之前你首先要能接受: 1 客户端基于java+html所以 软件包中需要包含 jre和 cef(chrome内核)的dll,软件包比较大。 2 因为jcef...
  • JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和Java一样跨平台。JavaFX比Swing好用很多,它允许开发使用FXML来设计和布局界面,跟Qt和Android的...
  • Java桌面GUI库

    2012-08-05 14:59:00
    感觉用Java开发web app是非常普遍的,工具啊,库啊都非常丰富,那么如果用Java开发一个普通的桌面应用,有哪些GUI库可供选择呢? 一、AWT Abstract Window Toolkit, 是Java中引入最早的GUI库,它是对native system...
  • 大家想到使用Java这门编程语言大多是脑海中是浮现的B/S开发,高并发、云计算、大数据等等,今天给大家带来的是Java不一样的使用方式——使用Java做PC桌面程序开发。 不同的是,之前Java是使用swing或者awt开发,但是...
  • android积累----桌面UI开发

    千次阅读 2011-09-20 11:51:22
    1。桌面屏数 Launcher.java static final int SCREEN_COUNT = 5; static final int DEFAULT_SCREN = 2; Launcher.xml <com.lp.launcher.W

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 409
精华内容 163
关键字:

java桌面ui

java 订阅