总结这一学期学习用java做界面的一些经验,整个界面是在netbeans 6.9下面开发的。
先看界面效果图。
主界面结构图:
这里总结一下用到的技术:
1.有背景的,去掉了默认标题栏的JFrame。
设置背景,主要是通过在layeredPane中添加一个JLabel作为背景,然后把顶层内容窗格设置成透明实现:
ImageIcon img = new ImageIcon(getClass().getResource("/images/bluebg.png"));//获得图片资源
imgLabel.setIcon(img);
imgLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));//设置JLabel边框
this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));// 将图片添加到layeredPane
imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
((JPanel)getContentPane()).setOpaque(false);// 将contentPane设置成透明的
去掉默认标题栏(下面这段代码我是写在构造方法里面):
this.setUndecorated(true); // 去掉窗口的装饰
this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
2.可以实现拖动,关闭窗口,最小化窗口的菜单面板
实现拖动,继承JPanel并加入下面代码,在构造方法里面要加入setDragable();:
private JFrame jFrame;
Point loc = null;
Point tmp = null;
boolean isDragged = false;
@SuppressWarnings("unchecked")
private void setDragable() {
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent e) {
isDragged = false;
jFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
public void mousePressed(java.awt.event.MouseEvent e) {
tmp = new Point(e.getX(), e.getY());
isDragged = true;
jFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
});
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent e) {
if(isDragged) {
loc = new Point(jFrame.getLocation().x + e.getX() - tmp.x,
jFrame.getLocation().y + e.getY() - tmp.y);
jFrame.setLocation(loc);
}
}
});
}
}
实现关闭和最小化代码只要把相应代码加入按钮事件里面就可以:
关闭窗口代码,有提示是否要关闭:
int flag = JOptionPane.showConfirmDialog(null, "Sure to close?",
"Care!", JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
if(JOptionPane.YES_OPTION == flag){
System.exit(0);
}else{
return;
}
最小化代码:
this.setExtendedState(JFrame.ICONIFIED);
3.可以自由切换的半透明JPanel
半透明效果,继承JPanel,重写paintComponent方法,画一张半透明图片作为背景,并把Jpanel设置成透明,
protected void paintComponent(Graphics g){super.paintComponent(g);
ImageIcon img = new ImageIcon(getClass().getResource("/images/fuzzy.png"));
img.paintIcon(this,g,0,0);
}
通过点击menuPanel面板上的四个按钮,切换成不同的面板。原理,mainPanel使用卡片布局(java.awt.CardLayout),并添加四个半透明JPanel,
通过四个按钮切换面板通过以下代码实现: ((CardLayout)mainPanel.getLayout()).show(mainPanel,"card2");//mainPanel为设置了CardLayout的JPanel,"Card2"为面
板的卡片名字,并不是面板的变量名
其他技术要点:
图形按钮:
setBorderPainted(false);//取消边框显示
setContentAreaFilled(false);//取消背景填充
setFocusPainted(false);//取消获得焦点时候描画边框
setRolloverIcon(); //设置当鼠标滑过时候显示的图标
源码及程序下载:http://download.csdn.net/detail/fycheung/4543026
欢迎交流学习