JAVA实现可设置背景的MDI窗口

我们都知道,MDI(Multiple Document Interface)即多文档界面。使用MDI窗体时,将在一个父窗体内建立工作区,父窗体能够令一个以上的子窗体限制于其中活动及操作。在office系列及VS/VS.Net等很多软件中都使用了MDI的表现形式。
而遗憾的是,虽然很多编程语言都提供了显著的MDI属性,但Java却算是个例外,基本上只能通过JDesktopPane结合JInternalFrame进行实现,而且局限性也比较多。
其实,利用Swing完成MDI,还有更简单的捷径可循。
下面,我给出一个简单的例子:
JAVA实现可设置背景的MDI窗口packageorg.loon.test;
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
/***//**
JAVA实现可设置背景的MDI窗口*<p>Title:LoonFramework</p>
JAVA实现可设置背景的MDI窗口*<p>Description:</p>
JAVA实现可设置背景的MDI窗口*<p>Copyright:Copyright(c)2007</p>
JAVA实现可设置背景的MDI窗口*<p>Company:LoonFramework</p>
JAVA实现可设置背景的MDI窗口*
@authorchenpeng
JAVA实现可设置背景的MDI窗口*@email:[email protected]
JAVA实现可设置背景的MDI窗口*
@version0.1
JAVA实现可设置背景的MDI窗口
*/

JAVA实现可设置背景的MDI窗口
importjavax.imageio.ImageIO;
JAVA实现可设置背景的MDI窗口
importjavax.swing.BorderFactory;
JAVA实现可设置背景的MDI窗口
importjavax.swing.JFrame;
JAVA实现可设置背景的MDI窗口
importjavax.swing.JLabel;
JAVA实现可设置背景的MDI窗口
importjavax.swing.JLayeredPane;
JAVA实现可设置背景的MDI窗口
importjavax.swing.JPanel;
JAVA实现可设置背景的MDI窗口
importjavax.swing.JTextArea;
JAVA实现可设置背景的MDI窗口
importjavax.swing.SwingConstants;
JAVA实现可设置背景的MDI窗口
importjavax.swing.WindowConstants;
JAVA实现可设置背景的MDI窗口
importjavax.swing.border.Border;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
importjava.awt.BorderLayout;
JAVA实现可设置背景的MDI窗口
importjava.awt.Color;
JAVA实现可设置背景的MDI窗口
importjava.awt.Dimension;
JAVA实现可设置背景的MDI窗口
importjava.awt.EventQueue;
JAVA实现可设置背景的MDI窗口
importjava.awt.Font;
JAVA实现可设置背景的MDI窗口
importjava.awt.Graphics;
JAVA实现可设置背景的MDI窗口
importjava.awt.Image;
JAVA实现可设置背景的MDI窗口
importjava.awt.Insets;
JAVA实现可设置背景的MDI窗口
importjava.awt.Point;
JAVA实现可设置背景的MDI窗口
importjava.awt.event.MouseEvent;
JAVA实现可设置背景的MDI窗口
importjava.awt.event.MouseListener;
JAVA实现可设置背景的MDI窗口
importjava.awt.event.MouseMotionListener;
JAVA实现可设置背景的MDI窗口
importjava.io.IOException;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicclassJavaMDIextendsJPanel...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
/***//**
JAVA实现可设置背景的MDI窗口*
JAVA实现可设置背景的MDI窗口
*/

JAVA实现可设置背景的MDI窗口
privatestaticfinallongserialVersionUID=1L;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
privatestaticfinalintBACKLAYER=1;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口FontFONT
=newFont("宋体",Font.PLAIN,12);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
privatefinalBackImagePanelayerPane;
JAVA实现可设置背景的MDI窗口
//子窗体背景色
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
privateint[]colors=...{0xdddddd,0xaaaaff,0xffaaaa,0xaaffaa,0xffffaa,0xffaaff,0xaaffff,0xddddff};
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
privateColorgetColor(inti,floatf)...{
JAVA实现可设置背景的MDI窗口
intb=(int)((i&0xff)*f);
JAVA实现可设置背景的MDI窗口i
=i>>8;
JAVA实现可设置背景的MDI窗口
intg=(int)((i&0xff)*f);
JAVA实现可设置背景的MDI窗口i
=i>>8;
JAVA实现可设置背景的MDI窗口
intr=(int)((i&0xff)*f);
JAVA实现可设置背景的MDI窗口
returnnewColor(r,g,b);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicJavaMDI()...{
JAVA实现可设置背景的MDI窗口
super(newBorderLayout());
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口Imageimage;
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
try...{
JAVA实现可设置背景的MDI窗口image
=ImageIO.read(getClass().getResource("javamdi.jpg"));
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口}
catch(IOExceptione)...{
JAVA实现可设置背景的MDI窗口image
=null;
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口layerPane
=newBackImagePane();
JAVA实现可设置背景的MDI窗口layerPane.setImage(image);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
//随机生成个子面板,作为内部窗体,实际使用时替换JPanel内部容器即可。
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
for(inti=0;i<colors.length;i++)...{
JAVA实现可设置背景的MDI窗口JPanelp
=createChildPanel(i);
JAVA实现可设置背景的MDI窗口p.setLocation(i
*80+20,i*50+15);
JAVA实现可设置背景的MDI窗口layerPane.add(p,BACKLAYER);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口add(layerPane,BorderLayout.CENTER);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
/***//**
JAVA实现可设置背景的MDI窗口*创建子面板,作为在内部移动的窗体
JAVA实现可设置背景的MDI窗口*
@parami
JAVA实现可设置背景的MDI窗口*
@return
JAVA实现可设置背景的MDI窗口
*/

JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
privateJPanelcreateChildPanel(inti)...{
JAVA实现可设置背景的MDI窗口
//使用html标记设定颜色
JAVA实现可设置背景的MDI窗口
Stringhtml="<html><fontcolor=#333333>子窗体ID"+i+"</font></html>";
JAVA实现可设置背景的MDI窗口JLabellabel
=newJLabel(html);
JAVA实现可设置背景的MDI窗口label.setFont(FONT);
JAVA实现可设置背景的MDI窗口label.setOpaque(
true);
JAVA实现可设置背景的MDI窗口label.setHorizontalAlignment(SwingConstants.CENTER);
JAVA实现可设置背景的MDI窗口
//设定背景色
JAVA实现可设置背景的MDI窗口
label.setBackground(getColor(colors[i],0.85f));
JAVA实现可设置背景的MDI窗口
//设定边距
JAVA实现可设置背景的MDI窗口
Borderborder1=BorderFactory.createEmptyBorder(4,4,4,4);;
JAVA实现可设置背景的MDI窗口label.setBorder(border1);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JTextAreatext
=newJTextArea();
JAVA实现可设置背景的MDI窗口text.setBackground(
newColor(colors[i]));
JAVA实现可设置背景的MDI窗口text.setMargin(
newInsets(4,4,4,4));
JAVA实现可设置背景的MDI窗口text.setLineWrap(
true);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JPanelp
=newJPanel();
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口Colorcol
=getColor(colors[i],0.5f);
JAVA实现可设置背景的MDI窗口Borderborder
=BorderFactory.createLineBorder(col,1);
JAVA实现可设置背景的MDI窗口p.setBorder(border);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
//移动监听
JAVA实现可设置背景的MDI窗口
DragMouseListenerli=newDragMouseListener(p);
JAVA实现可设置背景的MDI窗口p.addMouseListener(li);
JAVA实现可设置背景的MDI窗口p.addMouseMotionListener(li);
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口p.setLayout(
newBorderLayout());
JAVA实现可设置背景的MDI窗口p.add(label,BorderLayout.NORTH);
JAVA实现可设置背景的MDI窗口p.add(text,BorderLayout.CENTER);
JAVA实现可设置背景的MDI窗口
//子窗体大小
JAVA实现可设置背景的MDI窗口
p.setSize(newDimension(200,150));
JAVA实现可设置背景的MDI窗口
returnp;
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
/***//**
JAVA实现可设置背景的MDI窗口*子窗体拖拽监听
JAVA实现可设置背景的MDI窗口*
@authorchenpeng
JAVA实现可设置背景的MDI窗口*
JAVA实现可设置背景的MDI窗口
*/

JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
classDragMouseListenerimplementsMouseListener,MouseMotionListener...{
JAVA实现可设置背景的MDI窗口Pointorigin;
JAVA实现可设置背景的MDI窗口JPanelpanel;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口DragMouseListener(JPanelp)
...{
JAVA实现可设置背景的MDI窗口panel
=p;
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmousePressed(MouseEvente)...{
JAVA实现可设置背景的MDI窗口origin
=newPoint(e.getX(),e.getY());
JAVA实现可设置背景的MDI窗口
//移动
JAVA实现可设置背景的MDI窗口
layerPane.moveToFront(panel);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseDragged(MouseEvente)...{
JAVA实现可设置背景的MDI窗口
if(origin==null)return;
JAVA实现可设置背景的MDI窗口
intdx=e.getX()-origin.x;
JAVA实现可设置背景的MDI窗口
intdy=e.getY()-origin.y;
JAVA实现可设置背景的MDI窗口Pointp
=panel.getLocation();
JAVA实现可设置背景的MDI窗口panel.setLocation(p.x
+dx,p.y+dy);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseClicked(MouseEvente)...{}
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseEntered(MouseEvente)...{}
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseExited(MouseEvente)...{}
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseReleased(MouseEvente)...{}
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidmouseMoved(MouseEvente)...{}
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
//用分层面板JLayeredPane制作MDI背景
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
classBackImagePaneextendsJLayeredPane...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
/***//**
JAVA实现可设置背景的MDI窗口*
JAVA实现可设置背景的MDI窗口
*/

JAVA实现可设置背景的MDI窗口
privatestaticfinallongserialVersionUID=1L;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicBackImagePane()...{
JAVA实现可设置背景的MDI窗口
super();
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
voidsetImage(Imageimg)...{
JAVA实现可设置背景的MDI窗口bgImage
=img;
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
privateImagebgImage;
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidpaint(Graphicsg)...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
if(bgImage!=null)...{
JAVA实现可设置背景的MDI窗口
intimageh=bgImage.getHeight(null);
JAVA实现可设置背景的MDI窗口
intimagew=bgImage.getWidth(null);
JAVA实现可设置背景的MDI窗口Dimensiond
=getSize();
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
for(inth=0;h<d.getHeight();h+=imageh)...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
for(intw=0;w<d.getWidth();w+=imagew)...{
JAVA实现可设置背景的MDI窗口g.drawImage(bgImage,w,h,
this);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
super.paint(g);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicstaticvoidmain(String[]args)...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口EventQueue.invokeLater(
newRunnable()...{
JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicvoidrun()...{
JAVA实现可设置背景的MDI窗口createGUI();
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口}
);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口JAVA实现可设置背景的MDI窗口
publicstaticvoidcreateGUI()...{
JAVA实现可设置背景的MDI窗口
finalJFrameframe=newJFrame("JAVA实现可设置背景的MDI窗口");
JAVA实现可设置背景的MDI窗口frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JAVA实现可设置背景的MDI窗口frame.setSize(
newDimension(800,600));
JAVA实现可设置背景的MDI窗口frame.getContentPane().add(
newJavaMDI());
JAVA实现可设置背景的MDI窗口frame.setAlwaysOnTop(
true);
JAVA实现可设置背景的MDI窗口frame.setLocationRelativeTo(
null);
JAVA实现可设置背景的MDI窗口frame.setVisible(
true);
JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口}

JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口
JAVA实现可设置背景的MDI窗口

效果图如下:

JAVA实现可设置背景的MDI窗口