Swing组件最大化最小化按钮实现

最近在做JFrame窗口的时候为了将边框弄得更加美观,所以需要去掉默认的边框.然后在窗体上加上最大最小化与关闭按钮.(代码中ChatUI为类名)

 

主要方法:setExtendedState();

 

第一步:去掉JAVA边框

this.setUndecorated(true);

 

第二步:增加JButton按钮.

 

closeT = new JButton(new ImageIcon(
				"images\\chat\\sysbtn_close_normal.png"));
		closeT.setBounds(64, 0, 26, 19);
		threeButton.add(closeT);
		closeT.setActionCommand("关闭");
//不显示按钮的边框
		closeT.setBorderPainted(false);
//增加动作监听器
		closeT.addActionListener(lis);
//不可设为焦点
		closeT.setFocusable(false);
//透明
		closeT.setContentAreaFilled(false);
//增加鼠标监听器,当鼠标移到相应位置替换图片实现变色效果
//这里为了方便展示思路每次都new了一个ImageIcon.
		closeT.addMouseListener(new MouseAdapter() {

			public void mouseEntered(MouseEvent e) {
				closeT.setIcon(new ImageIcon(
						"images\\chat\\sysbtn_close_hover.png"));
			}

			public void mouseExited(MouseEvent e) {
				closeT.setIcon(new ImageIcon(
						"images\\chat\\sysbtn_close_normal.png"));
			}

			public void mousePressed(MouseEvent e) {
				closeT.setIcon(new ImageIcon(
						"images\\chat\\sysbtn_close_down.png"));
			}

		});

 

最小化类似.最大化有点特别,这与系统提供的最小化最大化方法有关.

 

第三步,增加的动作监听器里面实现其功能

isMax为标记当前是不是最大化窗口,最大化的时候点击该按钮需要还原成正常窗口.

 

                       if (source.equals("关闭")) {
				ChatUI.this.dispose();//不退出程序
			} else if (source.equals("最小化")) {
				ChatUI.this.setExtendedState(ICONIFIED);
			} else if (source.equals("最大化")) {
				if (!isMax) {
					ChatUI.this.setExtendedState(MAXIMIZED_BOTH);
					isMax = true;
				} else {
					ChatUI.this.setExtendedState(NORMAL);
					isMax = false;
				}
			}

 

 

因为最大化之后最小化,再调出窗口之后,窗口将恢复成正常窗口大小.所以在最大化这里需要加个判断,如果本来不是最大化窗口,直接正常弹出.否则,弹出后再设置为最大化窗口.

这个实现需要在窗口上加上一个窗口监听器.具体实现如下:

 

               this.addWindowListener(new WindowAdapter() {
			public void windowActivated(WindowEvent e) {
				if (isMax) {
					ChatUI.this.setExtendedState(MAXIMIZED_BOTH);
				}
			}
		});

 

你可能感兴趣的:(swing)