swing/swt 支持多屏幕显示

版权声明:转载请注明出处。 https://blog.csdn.net/tiantang_1986/article/details/82184859

swing中对于双屏的支持

public class Main{
	public static void main(String[] args) {
		JFrame jf = new JFrame(); 
		jf.setSize(400, 400);
		jf.setDefaultCloseOperation(3); 
		jf.setVisible(true);
		Main.showOnScreen(0, jf);//主屏显示

		JFrame jf2 = new JFrame(); 
		jf2.setSize(200, 400);
		jf2.setDefaultCloseOperation(3); 
		jf2.setVisible(true);
		Main.showOnScreen(1, jf2);//副屏显示
	}


	/**
	* 指定显示屏幕相应内容
	* screen 显示器序号
	* /
	public static void showOnScreen(int screen, JFrame frame) {
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice[] gd = ge.getScreenDevices();
		if (screen > -1 && screen < gd.length) {//一个或多个屏幕
			frame.setLocation(gd[screen].getDefaultConfiguration().getBounds().x, frame.getY());
		} else if (gd.length > 0) {//只有一个屏幕
			frame.setLocation(gd[0].getDefaultConfiguration().getBounds().x, frame.getY());
		} else {//未获取到屏幕信息
			throw new RuntimeException("No Screens Found");
		}
	}
}

swt对于双屏的支持

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;

import cn.com.cordiality.UI.MonitorManager;

public class Main {
	public static void main(String[] args) {
		Display display = Display.getDefault();
		Shell shell = new Shell(display,SWT.CLOSE);//主屏显示
		shell.setSize(600,400);
		//...//省略界面装配部分代码
		Monitor[] monitors = MonitorManager.getInstance().getMonitors();
		if (monitors.length >= 2) {
			Monitor monitor = monitors[0];
			Monitor monitor1 = monitors[1];

			if ((monitor != null) && (monitor1 != null)) {//第二个屏幕
				Demo demo = new Demo(shell, monitor.getClientArea().width, 0, monitor1.getClientArea().width, monitor1.getClientArea().height);
				demo.open();
			}
		}
		
		shell.open();
		while (!shell.isDisposed())
			if (!display.readAndDispatch())
				display.sleep();
	}

}

class Demo {
	Shell shell;
	Display display;

	public Demo(Shell parent, int left, int top, int maxWidth, int maxHeight) {
		shell = new Shell(parent, SWT.EMBEDDED);
		shell.setSize(maxWidth, maxHeight);
		shell.setLocation(left, top);
		shell.setLayout(new FormLayout());
		display = this.shell.getDisplay();

		// ...//省略界面装配部分代码
	}
	
	public void open() {
		this.shell.open();
		while (!this.shell.isDisposed())
			if (!this.display.readAndDispatch())
				this.display.sleep();
	}
}

MonitorManager 类

package cn.com.cordiality.UI;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;

public class MonitorManager {
   private Monitor[] monitors;
   private static MonitorManager monitorManager;

   public static MonitorManager getInstance() {
   	if (monitorManager == null) {
   		try {
   			monitorManager = new MonitorManager(Display.getCurrent().getMonitors());
   		} catch (Exception e) {
   			e.printStackTrace();
   		}
   	}
   	return monitorManager;
   }

   public MonitorManager(Monitor[] monitors) {
   	this.monitors = monitors;
   }

   public Monitor[] getMonitors() {
   	return this.monitors;
   }
}

谢谢打赏,微信二维码
微信打赏
支付宝二维码:
支付宝打赏

猜你喜欢

转载自blog.csdn.net/tiantang_1986/article/details/82184859
swt