`

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离开视口,则不会添加任何滚动条,并且您将失去“到达” ...

    Swing组件下载(常用组件)

    滚动条:JScrollBar 滑块:JSlider 进度栏:JProgressBar 格式化字段:JFormattedTextField 口令字段:JPasswordField Spinner:JSpinner 分隔符:JSeparator 文本窗格:JTextPane 编辑器窗格:JEditorPane 树:...

    Father_and_son_form.rar_Father_java father son

    Java 的swing 组件创建父子窗口的例子,使用的结构是JDesktopPane-JInternalFrame。JDesktopPane 相当于一个“父窗口”,可以拥有多个作为“子窗口”的JInternalFrame 对象。如运行截图所示,当选中Option 菜单下的...

    Java创建产生关联的主窗体与子窗体.rar

    Java创建产生关联的主窗体与子窗体,使用的结构是JDesktopPane-JInternalFrame。JDesktopPane 相当于一个“父窗口”,可以拥有多个作为“子窗口”的JInternalFrame 对象。如运行截图所示,当选中Option 菜单下的...

    (java swing毕业设计)图书管管理系统(视频+源码).zip

    import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing....

    java 电子词典

    JDesktopPane desktop; FileDialog filedialog_save; // 声明文件对话框 JTextField englishtext; JTextArea chinesetext; JButton b1, b2, b3, b4, b5; JLabel label; JMenuBar mbar; JMenu mfile, medit, ...

    图书管理系统数据库源代码.doc

    图书管理系统数据库源代码 //创建工程及设计主界面 public class Main extends JFrame { private static final JDesktopPane { DESKTOP_PANE=new JDesktopPane(); //桌面窗体 } public static void main(String[]...

    bikr:java中的种族(BikeRun)操作

    public void createAndShowGui(JDesktopPane desk) throws SQLException { //Δημιουργία tabed pane και εισαγωγή φορμών με εικόνες WebLookAndFeel.install (); frame = ...

    Java创建父子窗体

    Java 的swing 组件创建父子窗口的例子,使用的结构是JDesktopPane-JInternalFrame。JDesktopPane 相当于一个“父窗口”,可以拥有多个作为“子窗口”的JInternalFrame 对象。如运行截图所示,当选中Option 菜单下的...

    Java JLayeredPane 实现分层窗体框架

    摘要:Java源码,窗体界面,分层框架 Java实现分层框体,实现思路是:先创建一个JLayeredPane ... 这个实例中用到了JFrame 窗体框架中的用于放置JDesktopPane 对象的层,使用JFrame 窗体框架中的另外一个特殊的层,专门

    数据库课程设计(4).doc

    需求分析 1. 系统简介 本系统是一个工程... 附录 系统部分源代码 /** * 主窗体 * */ public class SupplySituation extends JFrame { private static final JDesktopPane DESKTOP_PANE = new JDesktopPane(); public s

    JCS Desktop module:基于 Swing 的桌面模块-开源

    该模块提供了一个基于 Swing 的桌面,带有... 使用 JDesktopPane 并通过此模块扩展其功能。 MDI 接口是通过 JInternalFrame 实现的,而 SDI 接口总有一天会通过 JFrames 实现。 看一下该模块的API的当前版本,网址为:

    订单系统 java 完整版

    JDesktopPane deskpane = new JDesktopPane();//在窗体里建立虚拟桌 JPanel p = new JPanel();//创建一个面板并实例化 public system(){//构造函数 setTitle("订单管理系统");//设置窗体标题 ...

    疯狂JAVA讲义

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

Global site tag (gtag.js) - Google Analytics