最近在做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);
}
}
});