`

JDesktopPane 滚动条

阅读更多

对于现实JDesktopPane 现实滚动条有如下方法:

 

package test;

import javax.swing.*;

public class TJInternalFrame extends JFrame {
	Container container;
	JButton button;
	JDesktopPane desktop;
	JInternalFrame internalFrame;

	static int frameCount = 0;
	static final int xOffSet = 1;
	static final int yOffSet = 150;

	// 1.Constructor of the frame class.
	public TJInternalFrame() {
		// 2.Give title to the frame and get its content pane
		super("TJInternalFrame");
		container = this.getContentPane();

		// 3.Create a button and add it at the lower portion of frame;
		// also add an action listener.
		button = new JButton("Click to Create More Internal Frames");
		button.addActionListener(new ButtonListener());
		container.add(button, BorderLayout.SOUTH);

		// 方法一:JDesktopPane显示滚动条!!!!!!
		// desktop = new JDesktopPane();// holds the internal frame
		// JScrollPane scrollPane = new JScrollPane();
		// scrollPane.getViewport().setView(desktop);
		//
		// desktop.setPreferredSize(new Dimension(1600, 2200)); // very
		// important
		//
		// container.add(scrollPane);// add the desktop to the main frame

		// 方法二:JDesktopPane显示滚动条!需要新建一个JDesktopPane的继承类JDesktop。!!!!!
		// ================================================================
		desktop = new JDesktop();
		JScrollPane scrollpane = new JScrollPane(desktop,
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		container.add(scrollpane);
		// ================================================================
		createInternalFrame();// create an internal frame

		// 5.Add the window listener, set the frame size, default close
		// operation and make the frame visible.
		addWindowListener(new WindowEventHandler());
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setSize(1060, 708);
		setVisible(true);
	}

	// 6.Creates an internal frame and adds it to the desktop pane.
	// Takes care of displaying frames with overlap offsets when called
	// multiple times.
	public void createInternalFrame() {

		// 7.Use a suitable internal frame constructor.
		JInternalFrame iFrame = new JInternalFrame("Internal Frame - "
				+ frameCount, false, false, false, false);
		iFrame.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null,
				null, null));
		((BasicInternalFrameUI) iFrame.getUI()).setNorthPane(null);
		// 8.Set the location and size, and add it to the desktop pane.
		iFrame.setLocation(xOffSet * frameCount, yOffSet * frameCount);
		frameCount++;
		iFrame.setSize(800, 150);
		iFrame.setVisible(true);
		desktop.add(iFrame);
		// 9.Let the frame be selected.
		try {
			iFrame.setSelected(true);
		} catch (java.beans.PropertyVetoException e) {
			System.out.println("Exception while selecting an internal frame");
		}
	}

	// 10.The button(action) listener.
	class ButtonListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			createInternalFrame();
		}
	}

	// 11.The listener class to handle closing of the frame.
	class WindowEventHandler extends WindowAdapter {
		public void windowClosing(WindowEvent evt) {
			System.exit(0);
		}
	}

	// 12.The main method.
	public static void main(String[] args) {
		String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
		try {
			UIManager.setLookAndFeel(lookAndFeel);

		} catch (Exception e) {
			e.printStackTrace();
		}
		TJInternalFrame frame = new TJInternalFrame();
	}
}

 

 JDesktopPane的继承类JDesktop

package test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JDesktop extends JDesktopPane
{
   public void paint(Graphics g)
   {
       super.paint(g);
       Dimension d = preferredSizeOfAllFrames();
       this.setPreferredSize(d);
       this.revalidate();
   }
 /**
  * @return 返回最佳desktop尺寸..
  */
   public Dimension preferredSizeOfAllFrames()
   {
       JInternalFrame [] array = getAllFrames();
       int maxX = 0;
       int maxY = 0;
       for (int i = 0; i < array.length; i++)
       {
           if ( array[ i ].isVisible() )
           {
               int cx;
               cx = array[i].getX();
               int x = cx + array[i].getWidth();
               if (x > maxX) maxX = x;
               int cy;
               cy = array[i].getY();
               int y = cy + array[i].getHeight();
               if (y > maxY) maxY = y;
           }
       }
       return new Dimension(maxX, maxY);
   }
}
 

 

0
0
分享到:
评论

相关推荐

    swing-desktopScrollPane:知道如何将滚动条添加到摆动的JDesktopPane组件的滚动窗格

    一个滚动窗格,它知道如何将滚动条添加到摆动的JDesktopPane组件。 长期以来,Swing的JDesktopPane一直存在一个已知问题。 如果JInternalFrame离开视口,则不会添加任何滚动条,并且您将失去“到达” ...

    java多文档界面的设计

    2. **添加滚动条支持**:可以通过将`JDesktopPane`置于一个带滚动条的容器中(如`JScrollPane`)来解决这一问题,确保即使`JInternalFrame`超出可视范围也能通过滚动条查看。 3. **实现自定义窗口菜单**:开发人员...

    java课件(完整版)第8章--5

    2. 滚动条面板(JScrollPane):当一个组件的内容超过了可视区域时,JScrollPane可以提供滚动条,使得用户能查看超出视区的部分。它可以包裹任何可滚动的组件,如JTable、JList或JTextArea。 3. 分隔条面板...

    JScrollDesktopPane-开源

    JScrollDesktopPane组件设计独特,将桌面环境与滚动条、菜单和快捷方式结合在一起,为应用程序带来动态和交互性的提升。 1. **JScrollDesktopPane组件介绍** JScrollDesktopPane是基于Java Swing库的一个扩展,它...

    Window Builder功能介绍

    - JScrollPane:提供了带有滚动条的面板,当组件超出可视区域时可以滚动查看。 - JSplitPane:用于将容器拆分成多个窗格,用户可以调整各个窗格的大小。 - JTabbedPane:选项卡面板,可以实现多卡片界面的用户交互,...

    Swing组件下载(常用组件)

    15. JScrollBar, JSlider: 分别提供垂直和水平滚动条以及滑块组件,用于调整视图或数值。 16. JProgressBar: 显示任务的进度,例如文件传输或计算过程。 17. JFormattedTextField, JPasswordField: 前者允许格式化...

    Java_2_GUI_Fundamentals_with_Swing.rar_Fundamentals_java gui

    在Java中,Swing提供了大量组件,如按钮、文本框、滚动条、菜单等,帮助开发者构建这样的界面。 Swing组件是轻量级的,这意味着它们主要由Java代码实现,而不是依赖于操作系统提供的底层图形支持。这使得Swing应用...

    GUI组件和设计PPT课件PPT学习教案.pptx

    6. **带滚动窗格的面板JScrollPane**:用于包含大型组件,如`JTextArea`,并提供滚动条。 7. **列表JList**:显示一组可选项目,用户只能选择单个或多个项。 8. **面板JPanel**:自定义组件容器,可以添加布局管理器...

    swing

    Swing 提供了丰富的组件集,包括按钮、文本框、滚动条、菜单等,以及用于布局管理、事件处理和模型视图控制器模式的支持。 Swing 不依赖于操作系统的原生GUI库,而是使用Java自身的可移植实现。这使得Swing应用可以...

    Java图形设计卷2swing

    - JTextArea:用于多行文本输入,支持滚动条。 - JTable:展示二维数据,可以编辑和排序。 - JTree:显示层次结构数据,如文件系统目录结构。 2. **事件处理**: - Swing使用监听器模式处理用户交互。例如,...

    2018-autumn-hw-17020031057-石晓晨-201811031

    JScrollPane添加滚动条,JSplitPane支持水平或垂直分割,JTabbedPane提供选项卡式布局。 **绘图** 在AWT中,我们使用paint(Graphics g)和update(Graphics g)方法进行绘图,而Swing提供了paintComponent(Graphics g)...

    图片管理系统

    - **JScrollPane**: 滚动面板,为内容区域提供滚动条。 - **JList**: 用于显示列表数据。 ##### 2. 数据库交互 系统使用了JDBC技术来连接数据库,并执行SQL语句,实现了数据的存储和检索。 - **Class.forName()**: ...

    Swing组件一览表

    - `JScrollPane`:用于添加滚动条以查看超出容器边界的内容。`JScrollPane()`和`JScrollPane(Component view)`是其构造方法。 - `JSplitPane`:允许用户调整两个区域的大小。`JSplitPane()`和`JSplitPane(int new...

    王者归来之Java图形(Swing&Awt)编程(经典).chm

    1. AWT组件:按钮、文本字段、标签、面板、滚动窗格等的用法。 2. 事件处理:了解事件监听器和适配器,以及如何处理鼠标和键盘事件。 3. 布局管理器:理解FlowLayout、BorderLayout、GridLayout、CardLayout等,以及...

    疯狂JAVA讲义

    11.6.1 菜单条、菜单和菜单项 414 11.6.2 右键菜单 416 学生提问:为什么即使我没有给多行文本域编写右键菜单,但当我在多行文本域上单击右键时一样会弹出右键菜单? 418 11.7 在AWT中绘图 418 11.7.1 画图的...

Global site tag (gtag.js) - Google Analytics