紧急求助,如何做到一个界面中×掉某个单元

sunx007 2003-11-26 10:35:39
详细描述:
比如一个界面中包括三部分,每个部分的右上角有个“×”号,当点击“×”号后这个部分就被关闭了,剩下的两部分占满了整个空间
----------------------
----------------------
------×-----×--------×
| | |
| | |
1 | 2 | 3 |
| | |
| | |
| | |
-----------------------------------------
“×”掉2后,编程
----------------------
----------------------
-----------×---------×
| |
| |
1 | 3 |
| |
| |
| |
-----------------------------------------


...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dekn 2003-11-27
  • 打赏
  • 举报
回复
oh sorry,上面第二个文件的名称是: Frame3.java
sunx007 2003-11-27
  • 打赏
  • 举报
回复
MDI?什么东西,windows+VC的概念(多文档)
Dekn 2003-11-27
  • 打赏
  • 举报
回复
我上面说到用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
Dekn 2003-11-27
  • 打赏
  • 举报
回复
MDI,或者灵活的运用layout
sunx007 2003-11-27
  • 打赏
  • 举报
回复
当然是在java里实现的,难道java就不能实现吗?
wobelisk 2003-11-27
  • 打赏
  • 举报
回复
use MDI
Yanbin_Q 2003-11-26
  • 打赏
  • 举报
回复
VC里实现方式是用ToolBar,但java的ToolBar没有关闭按钮的。
Yanbin_Q 2003-11-26
  • 打赏
  • 举报
回复
用JSplitPane,点X的时候,设置那个JSplitPane的左右比例为0.0或1.0,分界线粗细为0
我做过,不过没有在那角上做按钮,是放在菜单里控制的。

布局选用BorderLayout就会自动填充。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧