精华内容
下载资源
问答
  • WindowBuilder插件 最近在学GUI,无意间发现了eclipse中的一个插件WindowBuilder,简单记一下直接在eclipse商店中的安装。 打开eclipse,在工具栏的帮助(help)选项中选择Eclipse MarketPlace,进入商店。 2.在...

    最近接触到GUI图形界面设计,需要自学,无意间发现了eclipse中的一个插件WindowBuilder,使用起来方便而且效率很高,果断抛弃了自己敲代码的念头。下面简单记一下我在eclipse商店中的安装,然后是我目前学到的一些使用方法,很多都是按着我自己的想法说的,说的可能不专业有错误还请指正。

    一、安装

    1. 打开eclipse,在工具栏的帮助(help)选项中选择Eclipse MarketPlace,进入商店。

    在这里插入图片描述

    2.在搜索栏输入插件名WindowBuilder,点击install下载安装(我肯定选下载最多的…)
    在这里插入图片描述

    3.一路默认,完成后会跳到后台安装,在进度中可以看到进度。大概需要十分钟装好,询问是否重启。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    4.重启后顺便见到了久违的欢迎。
    在这里插入图片描述 5.然后可以找到装好的WindowBuilder,依次选择文件-新建-其他。
    在这里插入图片描述
    6.可以看到新添加了一个WindowBuilder选项。
    在这里插入图片描述

    二、使用

    1.创建过程

    1. 依次创建一个Java项目 WindowBuilderUse,包 view
      在这里插入图片描述
    2. 选中 view 包,右键依次选择 新建 > 其他 > WindowBuilder > Swing Designer > JFrame,在弹出的框里填写类型名称 LoginView 。
      在这里插入图片描述在这里插入图片描述在这里插入图片描述
    3. 创建成功后会自动生成一段代码,在左下角可以看到两个模式 Source 和 Design。Sourse为源代码,Design为界面设计。在这里插入图片描述在这里插入图片描述

    有时候可能会遇到下面这种情况
    在这里插入图片描述
    在这里插入图片描述

    我是遇到过这种情况,解决方法是在自动生成的 module-info.java 类中添加一行代码。

    module WindowBuilderUse {
    	requires java.desktop;
    }
    

    在这里插入图片描述

    在这里插入图片描述

    2.常规选项认识

    我是把它分了五个部分,具体的菜单栏我就暂时只写一些我目前用过的,后续会再添加或改正。
    在这里插入图片描述

    • Part 1 (构造) 对应着你设计的结构,当你点击的时候会互相响应。比如你在部分1点击(java.swing.JFrame), 部分5的窗体就会凸显,反之亦然.

    • Part2 (属性) 对应着你选中的某一结构的具体细节
      比如当我们选中窗体
      在这里插入图片描述

    最常用到的是
    background 设置窗体的背景颜色
    defaultCloseOperaion 设置用户在此窗体上发起 “close” 时默认执行的操作
    iconImage 设置窗体的图标
    resizable 设置大小可调
    title 设置窗体的标题

    当我们选中内容面板
    在这里插入图片描述
    Layout 设置布局,默认是 BorderLayout 布局,但是在这里我用的最多的是 GroupLayout 布局。


    • Part3
      我就用到了下面带三角的这一个,点击后可以快速测试,看看做的怎么样不需要你运行代码。
      在这里插入图片描述

    • Part4(组件)里面都是可以根据你的需要塞进去的组件。我用的最多的是Components和Menu
      在这里插入图片描述
      JLabel 标签
      JTextField 文本框
      JComboBox 下拉列表
      JButton 按钮
      JRadioButton 单选按钮
      JTextArea 文本区域
      JPasswordField 密码框
      JList 列表
      JTable 表格
      JMenu 菜单
      JMenuBar 菜单条
      JMenuItem 菜单项

    • Part5 就是你手动设计的图形界面

    你可以直接点中你要添加的组件,再换到界面上直接塞进去(在此之前先选择好你希望的面板的布局),下面就紧接着写几个组件的属性,基本上大同小异,捡几个常用的。

    在这里插入图片描述
    这是标签LTabel的属性
    font可以设置文字字体,字形,字号
    icon同样也是图标
    text是显示在外面的文本,类似于窗体的标题


    在这里插入图片描述
    这是下拉列表的属性,主要是 model 属性,点击后弹出来一个框,如下图输入,可以添加多个选项,用回车隔开就可以,点击确认后关闭,可以点击上面讲的快速测试按钮看看效果如何。

    在这里插入图片描述在这里插入图片描述


    关于菜单栏的设置
    (1)首先是选中窗体,在窗体上添加菜单条 JMenuBar,当你的鼠标移动到窗体里面,就会自动提示你应该放在绿色区域的位置。

    在这里插入图片描述
    放好后显示下图
    在这里插入图片描述
    (2)然后添加菜单JMenu,同样的当你鼠标移动到窗体内会有一条红线自动提示你放在哪里,如下图:
    在这里插入图片描述
    放好后如下图所示:
    在这里插入图片描述
    你可以继续横向或竖向添加菜单JMenu,你也可以选择菜单项JMenuItem,两者区别在于JMenu可再分,而JMenuItem不可再分。观察下图可以很明显的看出来 “文件” “新建”“保存”都是可再分的JMenu,“word文档”“excel表格”则是不可再分的最后一级JMenuItem。

    在这里插入图片描述

    3.规范

    每个组件都有一个名字,要习惯规范的命名,最起码自己看的懂,一看名字知道是哪个组件,特别是塞了很多个同样的组件,比如添加了很多个标签,你可以在右边的图形上直接选中后右键 (或者在Part1构造部分选中后再右键),选择Rename重命名,最简单的你可以把账号标签由默认的 lblNewabel 重命名为 zhanghaolblNewLabel ,密码标签由默认的 lblNewabel_1 重命名为 mimalblNewLabel_1。
    在这里插入图片描述
    可以看到结果如下图:
    在这里插入图片描述在这里插入图片描述

    4.图标1

    图标是我觉得必不可少的部分,因为好看…特别是至少可以替代咖啡在这里插入图片描述
    图标的存放位置最好是塞到项目里作为相对路径,我理解的是使用绝对路径的话当你换了地方就没办法调用了,比如没办法在另一台电脑上调用你这台电脑的图片,相对路径就可以一直跟着你。
    我们可以在这个项目下新建一个文件夹,命名为images,把我们用到的图标放进去。
    在这里插入图片描述在这里插入图片描述
    可以自行在网上下载需要的图标,直接复制粘贴到上文中新建的文件夹里即可。
    在这里插入图片描述
    添加也很简单,先选中一个需要的
    比如说窗体,我们选中属性 iconImage ,勾选第一个 Classpath resource ,依次选择你需要的图标然后选择确定。同样的可以给所有可以添加图标的组件添加图标(其他就可能是 icon 属性)。
    在这里插入图片描述在这里插入图片描述


    可能会遇到大小不合适的情况,我开始的时候总是很大,后来调整了大小都是 16 x 16,我在下面推荐了一个图标库很好用,可以直接下载需要的大小。

    三、登陆及跳转

    1.数据库

    我目前用的都是SQL Server ,建个表存点数据都大差不差。
    关于 eclipse和SQL Server 的连接请戳这里

    1.创建一个数据库,然后新建一张用户表,存入你的账号密码,简单就好。记住你的数据库名和用户表名,我这里分别是 TEXT 和 hl_admin 。

    在这里插入图片描述

    在这里插入图片描述

    2.eclipse

    1.新建一个 dao 包,再建一个 Database 类,专门来装数据库方面的操作。

    /**
    	 * 数据库连接类
    	 * @author zhangsan
    	 *
    	 */
    	public class Database {
    		String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    		//首先要在数据库中新建一个叫 TEXT 的数据库
    		String conStr = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TEXT";
    		// 数据库连接用户名
    		String dbUserName = "sa"; 
    		// 数据库连接密码
    		String dbPassword = "991230"; 
    		private static Connection con = null;
    		public Database() {
    			try {
    				Class.forName(driverName);
    				System.out.println("[加载驱动成功]");
    			}  
    			catch (Exception sqlEx) {
    				sqlEx.printStackTrace();
    				System.out.println("[加载驱动失败]");
    			}
    			try{
    				con=DriverManager.getConnection(conStr,dbUserName,dbPassword);
    				System.out.println("SQL Server连接成功!");
    			}
    			catch(Exception ex){
    				ex.printStackTrace();
    				System.out.print("SQL Server连接失败!"); 
    			}
    			
    		}
    
    		public static Connection getCon() {
    			return con;
    		}
    		/**
    		 * 关闭数据库连接
    		 * @throws SQLException 
    		 *
    		 */
    		public void closeCon(Connection con) throws SQLException{
    			if(con!= null) {
    				con.close();
    			}	
    		}
    		
    		/**
    		 * 管理员登录
    		 * 
    		 * @param username
    		 * @param password
    		 * @return
    		 */
    		public static boolean adminLogin(String username, String password) {
    			String sql = "select Username from hl_admin where Username=? and Password=?";
    			boolean flag = false;
    			try {
    				PreparedStatement ps = con.prepareStatement(sql);
    				ps.setString(1, username);
    				ps.setString(2, password);
    				ResultSet rs = ps.executeQuery();
    				if (rs.next()) {
    					flag = true;
    				}
    				rs.close();
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			return flag;
    		}
    
    }
    

    2.在LoginView类添加一个登录按钮

    在这里插入图片描述

    • 右键选择 Add event handler > action > actionPerformed 会自动跳到代码区
      

    在这里插入图片描述在这里插入图片描述

    • 创建一个方法 LoginAvt ,实现登录功能
      
    btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent ae) {
    				LoginAvt(ae);
    			}
    		});
    
    • 直接在提示里选择 在类型LoginView中创建方法...
      

    在这里插入图片描述

    • 在下面找到生成的代码,敲进去
      
    		protected void LoginAvt(ActionEvent ae) {
    		// TODO 自动生成的方法存根
    		String username = zhanghaotextField.getText().toString();
    		String password = mimapasswordField.getText().toString();
    		//判断字符串是否为空,这里是如果不为空,继续。
    		if(!zhanghaotextField.getText().isEmpty() && !mimapasswordField.getText().isEmpty())
    		{ 
    			//当点击登录按钮时,首先与数据库建立连接
    			Database.getCon();							
    			boolean result = Database.adminLogin(zhanghaotextField.getText().trim(), mimapasswordField.getText().trim());
    			if(result){
    				//登录成功 
    				new MainMenu().setVisible(true); //打开新界面MainMenu
    				this.setVisible(false);//关闭本界面
    			}else{
    				//登录失败
    				JOptionPane.showMessageDialog(null, "登录名或密码错误,请重新登录!", "提示", JOptionPane.ERROR_MESSAGE); 
    				
    			}
    		
    		}else if(zhanghaotextField.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(mimapasswordField.getText().isEmpty())	
    		{
    			JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
    		}
    	}
    

    事件处理机制摘要:
    监听器对象是一个实现了特定监听器接口(listener interface)的类的实例。
    事件源是一个能够注册监听器对象并发送事件对象的对象。
    当事件发生时,事件源将事件对象传递给所有注册的监听器。
    监听器对象将利用事件对象中的信息决定如何对事件做出回应。

    现在,只要按钮产生了一个“动作事件”,listener 对象就会得到通告。对于按钮来说,这个“动作事件”就是我们点击按钮。
    为了实现 ActionListener 接口,监听器类必须有一个被称为 actionPerformed 的方法,该方法接受一个 ActionEvent 对象参数。
    只要用户点击按钮,JButton 对象就会创建一个ActionEvent 对象,然后调用listener.action Performed(event) 传递事件对象。可以将多个监听器对象添加到一个像按钮这样的事件源中。这样一来,只要用户点击按钮,按钮就会调用所有监听器的 actionPerformed 方法。


    3.在 view 包里再以同样的方法做一个主界面 MainMenu类 作为登陆后的跳转界面

    在这里插入图片描述

    4.运行代码,弹出登陆界面,正确输入账号密码,弹出主界面。

    四、源代码

    /**
     * 登陆界面
     * @author zhangsan
     *
     */
    public class LoginView extends JFrame {
    
    	private JPanel contentPane;
    	private JTextField zhanghaotextField;
    	private JPasswordField mimapasswordField;
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					 new LoginView().setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public LoginView() {
    		setIconImage(Toolkit.getDefaultToolkit().getImage(LoginView.class.getResource("/images/\u7BA1\u7406.png")));
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 292, 241);
    		//居中显示
            this.setLocationRelativeTo(null);
            init();
            //初始化数据库
            new Database();
            //判断数据库是否连接成功
            if(Database.getCon() == null){
                JOptionPane.showMessageDialog(null, "数据库连接失败!", "提示", JOptionPane.ERROR_MESSAGE); 
                System.exit(0);
            }
    	}
    	private void init() {  
    		
    		JMenuBar menuBar = new JMenuBar();
    		setJMenuBar(menuBar);
    		
    		JMenu mnNewMenu = new JMenu("\u6587\u4EF6");
    		menuBar.add(mnNewMenu);
    		
    		JMenu mnNewMenu_2 = new JMenu("\u65B0\u5EFA");
    		mnNewMenu.add(mnNewMenu_2);
    		
    		JMenuItem mntmNewMenuItem_1 = new JMenuItem("word\u6587\u6863");
    		mnNewMenu_2.add(mntmNewMenuItem_1);
    		
    		JMenuItem mntmNewMenuItem_2 = new JMenuItem("excel\u8868\u683C");
    		mnNewMenu_2.add(mntmNewMenuItem_2);
    		
    		JMenu mnNewMenu_3 = new JMenu("\u4FDD\u5B58");
    		mnNewMenu.add(mnNewMenu_3);
    		
    		JMenuItem mntmNewMenuItem = new JMenuItem("\u4FDD\u5B58\u540E\u9000\u51FA");
    		mnNewMenu_3.add(mntmNewMenuItem);
    		
    		JMenu mnNewMenu_1 = new JMenu("\u7F16\u8F91");
    		menuBar.add(mnNewMenu_1);
    		
    		JMenuItem mntmNewMenuItem_3 = new JMenuItem("\u7C98\u8D34");
    		mnNewMenu_1.add(mntmNewMenuItem_3);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		
    		zhanghaotextField = new JTextField();
    		zhanghaotextField.setColumns(10);
    		
    		JLabel zhanghaolblNewLabel = new JLabel("\u8D26\u53F7:");
    		zhanghaolblNewLabel.setIcon(new ImageIcon(LoginView.class.getResource("/images/\u8D26\u53F7.png")));
    		zhanghaolblNewLabel.setFont(new Font("宋体", Font.BOLD, 14));
    		
    		JLabel mimalblNewLabel_1 = new JLabel("\u5BC6\u7801:");
    		mimalblNewLabel_1.setIcon(new ImageIcon(LoginView.class.getResource("/images/\u5BC6\u7801.png")));
    		mimalblNewLabel_1.setFont(new Font("宋体", Font.BOLD, 14));
    		
    		JButton btnNewButton = new JButton("\u767B\u5F55");
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent ae) {
    				LoginAvt(ae);
    			}
    		});
    		btnNewButton.setIcon(new ImageIcon(LoginView.class.getResource("/images/\u767B\u5F55.png")));
    		
    		mimapasswordField = new JPasswordField();
    		GroupLayout gl_contentPane = new GroupLayout(contentPane);
    		gl_contentPane.setHorizontalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addGap(28)
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    								.addComponent(zhanghaolblNewLabel, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE)
    								.addComponent(mimalblNewLabel_1, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE))
    							.addPreferredGap(ComponentPlacement.UNRELATED)
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
    								.addComponent(zhanghaotextField)
    								.addComponent(mimapasswordField, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)))
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addGap(64)
    							.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 97, GroupLayout.PREFERRED_SIZE)))
    					.addContainerGap(69, Short.MAX_VALUE))
    		);
    		gl_contentPane.setVerticalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGap(28)
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
    						.addComponent(zhanghaolblNewLabel)
    						.addComponent(zhanghaotextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
    					.addGap(18)
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
    						.addComponent(mimalblNewLabel_1)
    						.addComponent(mimapasswordField, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
    					.addGap(28)
    					.addComponent(btnNewButton)
    					.addContainerGap(31, Short.MAX_VALUE))
    		);
    		contentPane.setLayout(gl_contentPane);
    	}
    
    		protected void LoginAvt(ActionEvent ae) {
    		// TODO 自动生成的方法存根
    		String username = zhanghaotextField.getText().toString();
    		String password = mimapasswordField.getText().toString();
    		//判断字符串是否为空,这里是如果不为空,继续。
    		if(!zhanghaotextField.getText().isEmpty() && !mimapasswordField.getText().isEmpty())
    		{ 
    			//当点击登录按钮时,首先与数据库建立连接
    			Database.getCon();							
    			boolean result = Database.adminLogin(zhanghaotextField.getText().trim(), mimapasswordField.getText().trim());
    			if(result){
    				//登录成功 
    				new MainMenu().setVisible(true); //打开新界面MainMenu
    				this.setVisible(false);//关闭本界面
    			}else{
    				//登录失败
    				JOptionPane.showMessageDialog(null, "登录名或密码错误,请重新登录!", "提示", JOptionPane.ERROR_MESSAGE); 
    				
    			}
    		
    		}else if(zhanghaotextField.getText().isEmpty())
    		{
    			JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
    		}else if(mimapasswordField.getText().isEmpty())	
    		{
    			JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
    		}
    	}
    }
    /**
     * 主界面
     * @author zhangsan
     *
     */
    public class MainMenu extends JFrame {
    
    	private JPanel contentPane;
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					MainMenu frame = new MainMenu();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public MainMenu() {
    		setIconImage(Toolkit.getDefaultToolkit().getImage(MainMenu.class.getResource("/images/\u4FE1\u7528\u4FE1\u606F\u7BA1\u7406\u3001\u4FE1\u606F\u7BA1\u7406\u7C7B.png")));
    		setTitle("\u4E3B\u754C\u9762");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 300, 246);
    		this.setLocationRelativeTo(null);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		
    		JLabel lblNewLabel = new JLabel("\u4F60\u597D\u5440\uFF01");
    		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 26));
    		lblNewLabel.setIcon(new ImageIcon(MainMenu.class.getResource("/images/\u5F00\u5FC3.png")));
    		GroupLayout gl_contentPane = new GroupLayout(contentPane);
    		gl_contentPane.setHorizontalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGap(76)
    					.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 140, GroupLayout.PREFERRED_SIZE)
    					.addContainerGap(210, Short.MAX_VALUE))
    		);
    		gl_contentPane.setVerticalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGap(57)
    					.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 40, GroupLayout.PREFERRED_SIZE)
    					.addContainerGap(156, Short.MAX_VALUE))
    		);
    		contentPane.setLayout(gl_contentPane);
    	}
    }
    /**
    	 * 数据库连接类
    	 * @author zhangsan
    	 *
    	 */
    	public class Database {
    		String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    		//首先要在数据库中新建一个叫 TEXT 的数据库
    		String conStr = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TEXT";
    		// 数据库连接用户名
    		String dbUserName = "sa"; 
    		// 数据库连接密码
    		String dbPassword = "991230"; 
    		private static Connection con = null;
    		public Database() {
    			try {
    				Class.forName(driverName);
    				System.out.println("[加载驱动成功]");
    			}  
    			catch (Exception sqlEx) {
    				sqlEx.printStackTrace();
    				System.out.println("[加载驱动失败]");
    			}
    			try{
    				con=DriverManager.getConnection(conStr,dbUserName,dbPassword);
    				System.out.println("SQL Server连接成功!");
    			}
    			catch(Exception ex){
    				ex.printStackTrace();
    				System.out.print("SQL Server连接失败!"); 
    			}
    			
    		}
    
    		public static Connection getCon() {
    			return con;
    		}
    		
    		/**
    		 * 关闭数据库连接
    		 * @throws SQLException 
    		 *
    		 */
    		public void closeCon(Connection con) throws SQLException{
    			if(con!= null) {
    				con.close();
    			}	
    		}
    		
    		/**
    		 * @param username
    		 * @param password
    		 * @return
    		 */
    		public static boolean adminLogin(String username, String password) {
    			String sql = "select Username from hl_admin where Username=? and Password=?";
    			boolean flag = false;
    			try {
    				PreparedStatement ps = con.prepareStatement(sql);
    				ps.setString(1, username);
    				ps.setString(2, password);
    				ResultSet rs = ps.executeQuery();
    				if (rs.next()) {
    					flag = true;
    				}
    				rs.close();
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			return flag;
    		}
    
    }
    

    以上就是我目前的一些收获,文字看起来可能难理解,最好是去搜一些网课,看一些动态的视频会更容易上手。代码可能和按照步骤得来的有点出入,是有改动,已经给出了注释,比如让界面居中显示,手动在代码区加了一句 this.setLocationRelativeTo(null);

    新手上路,很期待各路大佬对我的指正。


    1. 安利一个图标的素材库 ↩︎

    展开全文
  • eclipse安装windowBuilder

    2015-11-05 00:48:46
    第一步:打开链接 http://www.eclipse.org/windowbuilder/download.php (http://img.blog.csdn.net/20151105002817176) 第二步:查找自己电脑的eclipse版本,然后点击后面的 link ,跳转到另一页面,然后复制链接...

    第一步:打开链接 http://www.eclipse.org/windowbuilder/download.php (https://img-blog.csdn.net/20151105002817176)
    第二步:查找自己电脑的eclipse版本,然后点击后面的 link ,跳转到另一页面,然后复制链接
    笔者版本是Mars!
    第三步:进入eclipse,点击install new software
    点击Add按钮,在路径那里粘贴刚才复制的链接,出现以下界面
    全选,然后一直next,最后finish,静静等待安装这里写图片描述
    第四步:安装成功,就可以新建swing项目啦
    这里写图片描述
    这里写图片描述

    展开全文
  • windowbuilder怎么实现登录窗口打开另一个窗口,打开的窗口也能用windowbuilder编辑
  • 打开Ecplise,选择菜单条窗口→首选项。...在首选项左侧找到WindowBuilder(必须安装WindowBuilder成功才能看到): 关闭并重新打开任意一个WindowBuilder编辑器以观察首选项修改的效果。 Ecplise ...

            因为WindowBuilder插件没有汉化版,于是我将插件相关设置翻译了一下。其实大部分情况下使用默认设置就足够了。

     打开Ecplise,选择菜单条窗口→首选项。

    在首选项左侧找到WindowBuilder(必须安装WindowBuilder成功才能看到!!):


    关闭并重新打开任意一个WindowBuilder编辑器以观察首选项修改的效果:修改后得重开一下设计器才有效果。


     

    通过“格式化程序”修改Ecplise格式化首选项。


     

    编辑器布局:(就是代码和设计的布局,6个布局自己试试就知道什么效果)

    代码和设计都在一个单独的选项卡上(代码默认在前)

    代码和设计都在一个单独的选项卡上(设计默认在前):推荐用这个

    代码和设计彼此分开的窗格且上下分布(代码默认在前)

    代码和设计彼此分开的窗格且上下分布(设计默认在前)

    代码和设计彼此分开的窗格且左右并排分布(代码默认在前)

    代码和设计彼此分开的窗格且左右并排分布(设计默认在前)


    设计界面的渲染延迟(毫秒) 


    双击组件树上的组件以:

    跳转到该组件所在位置的源代码 

    创建/打开默认的事件监听器

    修改该组件的名字


    将Windows Builder编辑器与自动识别的Java GUI文件关联起来 :推荐打开

    在切换到设计页面(Desgin页)时最大化编辑器:Eclipse更方便设计界面

    在编辑器保存时才对源代码格式化并重新解析

    选中组件时转到组件的源代码定义

    当使用选择类组件时自动添加调色板组件

    在控制台显示调试信息

    当Ecplise和WindowBuilder版本不兼容时提示警告信息(血的教训:一定要两者版本对应否则会出现各种奇怪的bug)


    Code Parsing:代码解析规则

    ”隐藏代码块“开始标签

    “隐藏代码块”结束标签

    隐藏单行代码标签

    严格模式(需要给参数添加@wbp标签)

    高亮被访问/执行过的代码

    选择高亮颜色


    Swing Swing工具包的窗体设置

    默认窗体宽度

    默认窗体高度

    高亮显示无边框的窗体

    在组件树中显示组件的文本属性

    添加组件时弹出设置组件的重要属性的提示框

    添加组件时自动将组件设为可编辑状态


     Swing→Code Generation 代码自动生成


    使用现有的代码生成设置(如果能找到的话):选择几种现有的代码生成设置的模板?


    默认的代码生成设置:左边为变量的格式,右边是语句的格式。

    Local:使用组件声明唯一局部变量,在声明时初始化。可添加final修饰符

    Field:使用组件声明唯一成员变量,稍后在代码中初始化字段。可添加”this“前缀,可添加任意权限修饰符。

    Init. Field:使用组件声明唯一成员变量,在字段声明时直接初始化。可添加任意权限修饰符。

    Lazy:每个组件有单独的getXXX0方法

     Flat:所有组件在一个代码块中,可以给每个组件设置一行开始前缀,默认为空行

    Block:每个组件采用单独的代码块。

    (注意:设置后之前已经生成的代码是不会改的,也就是说你在一个项目的中途修改此设置会导致一个源代码中有不同的代码风格,很乱...)

    perview可以实时预览你设置的自动生成代码的最终效果。


    Swing→Code Generation→Event handlers 代码自动生成中的事件处理相关


    创建事件代码的格式:

    使用匿名类

    使用内部类

    使用父类继承listener接口


    创建事件处理器的桩代码并命名为:……(注意格式)


    删除组件时删除这些桩代码

    将 事件处理器中的参数用“final”修饰

    显示具有事件的组件的图标装饰器


     Swing→Code Generation→NLS 代码自动生成中的多语言相关

    如果类包含外部化属性,则自动外部化字符串属性。

    使用字符串在键中的值:生成的键只具有字符串的值,它们代表的值忽略了它们上的任何其他格式配置。

    在键中使用限定类名
    更改组件变量时重命名键
    在键尾追加字符串的值
    键作为值前缀:


     Swing→Code Generation→Variables 代码自动生成中的变量名相关:建议不动


    类型特异性 


    自动命名


    杂类


     Swing→Layouts  布局相关

    默认布局:

    容器自动使用父类的布局管理器类型
    使用模式创建布局变量:


     Swing→Layouts→Absolute 

     Swing→Layouts→GridBagLayout

     Swing→Layouts→JGoodies FormLayout

     Swing→Layouts→MigLayout

    几种布局的默认设置


    Swing→LookAndFeel:具体就是一些管理”皮肤“的设置。

    LookAndFeel可以理解为“皮肤”:从功能上说,这是一种批量管理 Swing 控件外观的机制。

    推荐阅读:Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel_sunyiz的专栏-CSDN博客本文是 LookAndFeel 系列教程的第一篇。是我在对 Swing 学习摸索中的一些微薄经验。我相信,仔细看完全系列之后,你就能写出自己的 LookAndFeel。你会发现 Swing 原来可以这样美。--------------------------------------------------------------------------------https://blog.csdn.net/sunyiz/article/details/7595371


    WindowBuilder→SWT

    因为我用Swing,应该不会更新SWT部分。

    展开全文
  • 利用 Window Builder 快速搭建Java GUI 界面

    万次阅读 多人点赞 2018-12-05 16:20:47
    1. 为 eclipse 安装 window builder 插件 2. 新建 jframe,开始可视化 GUI 之旅 3. 可视化 GUI 设计入门 修改窗口标题: 修改标签和按钮上的文字: 将下方文字域改为不可编辑: 给按钮添加事件监听: ...

    读完本篇文章,你可以迅速上手JavaGUI编程,可以尝试自己写出美美的界面啦~

    (虽然不是很美观hhh但是比起黑框框好多了)


    目录

    1. 为 eclipse 安装 window builder 插件

    2. 新建 jframe,开始可视化 GUI 之旅

    3. 可视化 GUI 设计入门

    修改窗口标题:

    修改标签和按钮上的文字:

    将下方文字域改为不可编辑:

    给按钮添加事件监听:

    修改字体大小:

     2018-12-5 更新:给 JTextArea 添加滚动条

    2019-4-26 更新:多页面跳转


    环境:win10、eclipse 4.7.3a

    本教程适合对 Java 和 eclipse 有一定了解,但对 Java GUI 的使用又比较犯难的人使用。

    1. 为 eclipse 安装 window builder 插件

    打开 window builder 网址:https://www.eclipse.org/windowbuilder/download.php

    然后回到 eclipse 界面,

    然后一路 next,accept 之后等待安装成功即可。

    2. 新建 jframe,开始可视化 GUI 之旅

    在创建好工程和包之后,右键包(package),找到 WindowBuilder → Swing Designer → JFrame

    新建之后,会发现多了许多默认的代码,点击下方的 design:

     界面变成了这样子:

    3. 可视化 GUI 设计入门

    接下来简单介绍几种常用的方法,抛砖引玉:

    这个absolute layout 有什么用呢?所谓绝对布局,就是让你可以随心所欲的安放控件,你可以与默认的布局比较一下。【该布局比较适合新手使用】

    用这种方法,我们接下来添加两个 JTextField、一个JButton,如下图示(可以按照自己的想法调整大小和位置)

    我们这个窗口想做什么呢?我觉得做个简单的例子吧,在小输入框中输入文字,点击按钮后,可以把文字在下方提示框中输出。

    这里有几个细节,我们的窗口缺少标题,下方的文字提示框应该是那种灰色的不可输入的才行。

    修改窗口标题:

    /**
    	 * Create the frame.
    	 */
    	public Test() {
    		super("输入输出测试");//加入此行代码即可设置窗口标题
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
        ........//以下的代码省略......

    更新:此处也可用 setTitle(String); //该方法可以在程序中修改标题,而不需要局限于开头。 

    修改标签和按钮上的文字:

    ......//修改标签的文字......
    	//JLabel lblNewLabel = new JLabel("New label");
            JLabel lblNewLabel = new JLabel("内容:");//将上方一行改为这行
    	lblNewLabel.setBounds(32, 52, 72, 18);
    	contentPane.add(lblNewLabel);
    ......//省略代码......
    ......//修改按钮的文字......
    	//JButton btnNewButton = new JButton("New button");
            JLabel lblNewLabel = new JLabel("确定");//将上方一行改为这行
    	btnNewButton.setBounds(320, 48, 106, 27);
    	contentPane.add(btnNewButton);
    ......//省略代码......

    将下方文字域改为不可编辑:

    此处的顺序取决于你添加控件时先添加按钮还是先添加下方的文字域,由于我先添加了按钮,所以要先把它们的位置调换一下。

    然后在文字域的配置中添加一句即可,修改后的代码如下:

    textField_1 = new JTextField();
    textField_1.setBounds(0, 115, 432, 138);
    contentPane.add(textField_1);
    textField_1.setColumns(10);
    textField_1.setEditable(false);//添加的代码,设置为不可编辑
    		
    JButton btnNewButton = new JButton("确定");
    btnNewButton.setBounds(320, 48, 106, 27);
    contentPane.add(btnNewButton);

    给按钮添加事件监听:

    点击之后,会自动跳转到代码区:

    btnNewButton.addActionListener(new ActionListener() {
    	public void actionPerformed(ActionEvent e) {
    //从上方内容的文本框中获取文字,放到下方的文本框中
    	textField_1.setText("提示区:"+textField.getText());
        }
    });

    此时主要功能已经完成得差不多啦,看看效果:

    我们发现还有一点小问题,一个是字体太小,另一个是下方提示区都挤在左下方了。

    修改字体大小:

    【一个方便的小技巧,按住CTRL,可以一次选中多个控件,一起修改字体】

    我们来看看最终效果: 

    大功告成,如果博客中有任何疑问或错误,欢迎一起交流/指正。


     2018-12-5 更新:给 JTextArea 添加滚动条

    2019-4-26 更新:多页面跳转

    留言区有朋友问到了,那么我这里就写一写吧

    首先,简单写一个页面,包括一个标签和一个按钮: 

    关键代码:给按钮设置点击监听(思路为先将当前的 jpanel 隐藏,然后设置新的 jpanel ,实际用到时,我们可以自己新建一个类来写一个新的页面,就不用挤在这个button 的监听事件里面)

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
    	    contentPane.setVisible(false);//将当前页面隐藏
    		JPanel newPage = new JPanel();
    //	设置窗体位置、大小跟原窗口一样
    		newPage.setBounds(100, 100, 450, 300);
    		newPage.setBorder(new EmptyBorder(5, 5, 5, 5));
    //	设置新页面
    		setContentPane(newPage);
    //	给新页面添加标签
    		JLabel nLabel = new JLabel("我是新页面哦");
    		nLabel.setBounds(38, 67, 89, 38);
    		newPage.add(nLabel);
    	}
    });

    效果如下:

    完整代码如下:

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JLabel;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class NewPage extends JFrame {
    
    	private JPanel contentPane;
    	static NewPage frame;
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					frame = new NewPage();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public NewPage() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		
    		JLabel label = new JLabel("我是页面1");
    		label.setBounds(38, 67, 89, 38);
    		contentPane.add(label);
    		
    		JButton button = new JButton("点我跳转到页面2");
    		button.addActionListener(new ActionListener() {
            ... 见上面
    		});
    		button.setBounds(152, 65, 193, 42);
    		contentPane.add(button);
    	}
    
    }
    

     

    展开全文
  • WindowBuilder——Java界面篇之开端 大三下学期,上一周,我正式确定了考研的专业与学校,计划报考上交大的双控专业,准备寻找研究物联网方向的老师。学习 Java 界面编写,我的想法是写一个用于无线传感网拓扑控制...
  • Eclipse + Java + WindowBuilder 可视化编程

    万次阅读 2014-02-07 00:42:04
    Eclipse真是个好东西,你可以在上面编写各种各样的语言,但是一个致命的问题是界面设计。...对于编写Java程序,我选择了WindowBuilder,一个可以开发SWT和Swing的GUI插件。 安装教程:http://blog.csdn.net/am
  • Header.aspx:当前登录用户:protected void BtnExit_Click(object sender, EventArgs e){Response.Write("parent.location...}向页面弹出提示后,跳转到其他页面StringBuilder Builder = new StringBuilder();Builde...
  • 找到官网的windowbuilder插件页面(后面简称wb) https://www.eclipse.org/windowbuilder/download.php 点击link,复制跳转过去的链接 打开eclipse->help->install 点add,把刚刚复制的链接贴进去,勾选
  • IOS 学习笔记 页面跳转

    千次阅读 2019-04-19 17:27:45
    目录 ...2.1 使用UIViewController实现页面跳转 2.1.1 故事板布局 2.1.2调出Navigation Controller 2.1.3 给导航栏添加一个标题 2.1.4 给NavigationBar添加跳转按钮 2.1.5 添加第二个页面 ...
  • (不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知,在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码。 一 视图跳转 《StoryBoard下的视图跳转...
  • (不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知,在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码。 一 视图跳转 《StoryBoard下的...
  • 跳转网络页面信息

    2017-12-15 16:46:18
    AlertDialog.Builder(MainActivity. this ).setMessage( text ).show(); } }); } // @Override // public void onClick(View view) { // if (R.id.button3 != view.getId()){ // return; // // 跳转到 ...
  • 从推送的消息跳转到指定的页面分两种情况(主要是Activity的生命周期和内存释放引起): 1) App在前台或在后台未被系统回收。 2) App进程已经被系统回收。 第一种情况: 点击消息,弹出Dialog提醒用户消息内容,...
  • (不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知,在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码。 一 视图跳转 《StoryBoard下的...
  • 一: 需求背景 目前公司项目全部才用原生开发,现在想提升开发效率,把部分两端公共...很少有介绍有从原生跳转到RN某个单页面的介绍。最近研究了一下最终做出的效果如下。 按钮的界面为原生,跳转的两个是不同的RN界...
  • hbuilder项目总结:页面跳转

    万次阅读 2017-06-06 15:40:39
    1.登录页面跳转到主页面(区别Android与ios系统 ,ios系统10以上不显示弹框,且不能直接关闭软件,故当main页面的webview还存在时直接打开,不存在时创建) var toMain = function() { console.log(“toMain……...
  • Flex页面跳转有很多值得学习的地方,本文向大家介绍一下Flex页面跳转的几种方式,主要包括五种方式,这里为大家一一介绍。 AD:   在学习Flex的过程中,你可能会遇到Flex页面跳转的概念,这里和大家分享一下...
  • 1.ajaxsetup------写在公用js中(每个ajax请求之后都会走这个回调) 2.拦截器设置回调的参数...session过期,session=null,要跳转登录页面。跳出iframe,分ajax请求的跳转,普通连接的跳转 package com.wondersgroup
  • (不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知,在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码。 一 视图跳转 《StoryBoard下的...
  • 在模式窗口中实现页面跳转

    千次阅读 2012-02-02 10:30:56
    在使用showModalDialog方法打开一个模式窗口进行操作的过程中,需要在此模态窗口中跳转到另一个页面进行操作。 使用原来的方式不管是表单提交还是使用js,实际的效果为在原模式窗口外打开一个新的页面提交了跳转。 ...
  • storyboard页面间的跳转

    2014-08-26 10:03:32
    在iphone中,segue有:push,modal,和custom三种不同的类型,这些类型的区别在与新页面出现的方式。 而在ipad中,有push,modal,popover,replace和custom五种不同的类型。 modal 模态转换  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,725
精华内容 1,490
关键字:

windowbuilder跳转页面