用JSplitPane,点X的时候,设置那个JSplitPane的左右比例为0.0或1.0,分界线粗细为0
我做过,不过没有在那角上做按钮,是放在菜单里控制的。布局选用BorderLayout就会自动填充。

解决方案 »

  1.   

    VC里实现方式是用ToolBar,但java的ToolBar没有关闭按钮的。
      

  2.   

    当然是在java里实现的,难道java就不能实现吗?
      

  3.   

    我上面说到用layout,下面是我刚才的实现,请看。**************   Application3.java    **************************package test;import javax.swing.UIManager;
    import java.awt.*;/**
     * <p>Title: close or open</p>
     * <p>Description: dekn</p>
     * <p>Copyright: Copyright (c) dekn 2003</p>
     * <p>Company: dekn</p>
     * @author dekn
     * @version 1.0
     */public class Application3 {
      boolean packFrame = false;  //Construct the application
      public Application3() {
        Frame3 frame = new Frame3();
        //Validate frames that have preset sizes
        //Pack frames that have useful preferred size info, e.g. from their layout
        if (packFrame) {
          frame.pack();
        }
        else {
          frame.validate();
        }
        //Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
          frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
          frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
      }  //Main method
      public static void main(String[] args) {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        new Application3();
      }
    }
    **************   Application3.java    **************************package test;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;/**
     * <p>Title: close or open</p>
     * <p>Description: dekn</p>
     * <p>Copyright: Copyright (c) dekn 2003</p>
     * <p>Company: dekn</p>
     * @author dekn
     * @version 1.0
     */public class Frame3 extends JFrame {
      JPanel contentPane;
      BorderLayout borderLayout1 = new BorderLayout();
      JPanel jPanel1 = new JPanel();
      JPanel jPanel2 = new JPanel();
      BorderLayout borderLayout2 = new BorderLayout();
      JButton jButton1 = new JButton();
      JButton jButton2 = new JButton();
      JPanel jPanel3 = new JPanel();
      JPanel jPanel4 = new JPanel();
      JPanel jPanel5 = new JPanel();
      BorderLayout borderLayout3 = new BorderLayout();
      JEditorPane jEditorPane1 = new JEditorPane();
      BorderLayout borderLayout4 = new BorderLayout();
      JButton jButton3 = new JButton();
      BorderLayout borderLayout5 = new BorderLayout();
      JTextArea jTextArea1 = new JTextArea();  //Construct the frame
      public Frame3() {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }  //Component initialization
      private void jbInit() throws Exception  {
        contentPane = (JPanel) this.getContentPane();
        contentPane.setLayout(borderLayout1);
        this.setSize(new Dimension(513, 379));
        this.setTitle("Frame Title");
        jPanel2.setLayout(borderLayout2);
        jButton1.setText("close");
        jButton1.addActionListener(new Frame3_jButton1_actionAdapter(this));
        jButton2.setText("open");
        jButton2.addActionListener(new Frame3_jButton2_actionAdapter(this));
        jPanel3.setPreferredSize(new Dimension(150, 10));
        jPanel3.setLayout(borderLayout3);
        jPanel4.setPreferredSize(new Dimension(150, 10));
        jPanel4.setLayout(borderLayout4);
        jEditorPane1.setBorder(BorderFactory.createLineBorder(Color.black));
        jEditorPane1.setText("jEditorPane1");
        jButton3.setText("jButton3");
        jPanel5.setLayout(borderLayout5);
        jTextArea1.setBorder(BorderFactory.createLoweredBevelBorder());
        jTextArea1.setText("jTextArea1");
        contentPane.add(jPanel1, BorderLayout.NORTH);
        jPanel1.add(jButton1, null);
        jPanel1.add(jButton2, null);
        contentPane.add(jPanel2, BorderLayout.CENTER);
        jPanel2.add(jPanel3, BorderLayout.WEST);
        jPanel3.add(jEditorPane1, BorderLayout.CENTER);
        jPanel2.add(jPanel4, BorderLayout.EAST);
        jPanel4.add(jButton3, BorderLayout.CENTER);
        jPanel2.add(jPanel5, BorderLayout.CENTER);
        jPanel5.add(jTextArea1, BorderLayout.CENTER);
      }  //Overridden so we can exit when window is closed
      protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
          System.exit(0);
        }
      }  /**
       * close方法
       * @param e ActionEvent
       */
      void jButton1_actionPerformed(ActionEvent e) {
        this.jPanel2.remove(this.jPanel4);
        this.jPanel2.repaint();
        this.jPanel2.paintAll(this.jPanel2.getGraphics());
      }  /**
       * open方法
       * @param e ActionEvent
       */
      void jButton2_actionPerformed(ActionEvent e) {
        jPanel2.add(jPanel4, BorderLayout.EAST);
        this.jPanel2.repaint();
        this.jPanel2.paintAll(this.jPanel2.getGraphics());
      }
    }class Frame3_jButton1_actionAdapter implements java.awt.event.ActionListener {
      Frame3 adaptee;  Frame3_jButton1_actionAdapter(Frame3 adaptee) {
        this.adaptee = adaptee;
      }
      public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
      }
    }class Frame3_jButton2_actionAdapter implements java.awt.event.ActionListener {
      Frame3 adaptee;  Frame3_jButton2_actionAdapter(Frame3 adaptee) {
        this.adaptee = adaptee;
      }
      public void actionPerformed(ActionEvent e) {
        adaptee.jButton2_actionPerformed(e);
      }
    }
    上面的代码最重要的是:  /**
       * close方法
       * @param e ActionEvent
       */
      void jButton1_actionPerformed(ActionEvent e) {
        this.jPanel2.remove(this.jPanel4);
        this.jPanel2.repaint();
        this.jPanel2.paintAll(this.jPanel2.getGraphics());
      }  /**
       * open方法
       * @param e ActionEvent
       */
      void jButton2_actionPerformed(ActionEvent e) {
        jPanel2.add(jPanel4, BorderLayout.EAST);
        this.jPanel2.repaint();
        this.jPanel2.paintAll(this.jPanel2.getGraphics());
      }
    我是用borderlayout布局实现的,当然,如果您很熟悉其它布局的话,您也可以试着用其它布局实现,用布局来实现这种效果很简单,但一些场合,还是建议您用MDI。
    Dekn 2003-11-27
      

  4.   

    MDI?什么东西,windows+VC的概念(多文档)
      

  5.   

    oh sorry,上面第二个文件的名称是: Frame3.java