Swing中JInternalFrame窗口平铺、级联等实现
来源:互联网 发布:好听的编程项目名称 编辑:程序博客网 时间:2024/05/20 08:42
import java.awt.Dimension;import java.beans.PropertyVetoException;import java.util.ArrayList;import javax.swing.JDesktopPane;import javax.swing.JInternalFrame;public class FrameLayerManager { private static ArrayList<JInternalFrame> getVisibleFrameList(JDesktopPane desktopPane) { JInternalFrame[] allframes = desktopPane.getAllFrames(); ArrayList<JInternalFrame> list = new ArrayList<>(); for (JInternalFrame eachFrame : allframes) { if (eachFrame.isVisible()) { list.add(eachFrame); } } return list; } public static void cascade(JDesktopPane desktopPane) { ArrayList<JInternalFrame> list = getVisibleFrameList(desktopPane); int count = list.size(); if (count == 0) { return; } for (int i = 0; i < count; i++) { JInternalFrame f = list.get(count - i - 1); if (!f.isClosed() && f.isIcon()) { try { f.setIcon(false); } catch (PropertyVetoException ignored) { } } Dimension size = desktopPane.getSize(); desktopPane.getDesktopManager().resizeFrame(f, i * 30, i * 30, size.width - count * 30, size.height - count * 30); } } public static void horizontal(JDesktopPane desktopPane) { ArrayList<JInternalFrame> list = getVisibleFrameList(desktopPane); int count = list.size(); if (count == 0) { return; } Dimension size = desktopPane.getSize(); for (int i = 0; i < count; i++) { JInternalFrame f = list.get(i); if (!f.isClosed() && f.isIcon()) { try { f.setIcon(false); } catch (PropertyVetoException ignored) { } } desktopPane.getDesktopManager().resizeFrame(f, 0, size.height * i / count, size.width, size.height / count); } } public static void vertical(JDesktopPane desktopPane) { ArrayList<JInternalFrame> list = getVisibleFrameList(desktopPane); int count = list.size(); if (count == 0) if (count == 0) { return; } Dimension size = desktopPane.getSize(); for (int i = 0; i < count; i++) { JInternalFrame f = list.get(i); if (!f.isClosed() && f.isIcon()) { try { f.setIcon(false); } catch (PropertyVetoException ignored) { } } desktopPane.getDesktopManager().resizeFrame(f, size.width * i / count, 0, size.width / count, size.height); } } public static void arrangeAll(JDesktopPane desktopPane) { ArrayList<JInternalFrame> list = getVisibleFrameList(desktopPane); int count = list.size(); if (count == 0) { return; } int sqrt = (int) Math.sqrt(count); int rows = sqrt; int cols = sqrt; if (rows * cols < count) { cols++; if (rows * cols < count) { rows++; } } Dimension size = desktopPane.getSize(); int w = size.width / cols; int h = size.height / rows; int x = 0; int y = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols && ((i * cols) + j < count); j++) { JInternalFrame f = list.get((i * cols) + j); if (!f.isClosed() && f.isIcon()) { try { f.setIcon(false); } catch (PropertyVetoException ignored) { } } desktopPane.getDesktopManager().resizeFrame(f, x, y, w, h); x += w; } y += h; x = 0; } }}