Как я могу получить разрешение экрана в java?
Как можно получить разрешение экрана (ширина х высота) в пикселях?
Я использую JFrame и методы Java swing.
10 ответов:
вы можете получить размер экрана с
Toolkit.getScreenSize()
метод.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width = screenSize.getWidth(); double height = screenSize.getHeight();
в конфигурации с несколькими мониторами вы должны использовать это:
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); int width = gd.getDisplayMode().getWidth(); int height = gd.getDisplayMode().getHeight();
если вы хотите получить разрешение экрана в DPI, вам придется использовать
getScreenResolution()
метод onToolkit
.
ресурсы :
этот код будет перечислять графические устройства в системе (если установлено несколько мониторов), и вы можете использовать эту информацию для определения близости монитора или автоматического размещения (некоторые системы используют небольшой боковой монитор для отображения в реальном времени, когда приложение работает в фоновом режиме, и такой монитор может быть идентифицирован по размеру, цветам экрана и т. д.):
// Test if each monitor will support my app's window // Iterate through each monitor and see what size each is GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); Dimension mySize = new Dimension(myWidth, myHeight); Dimension maxSize = new Dimension(minRequiredWidth, minRequiredHeight); for (int i = 0; i < gs.length; i++) { DisplayMode dm = gs[i].getDisplayMode(); if (dm.getWidth() > maxSize.getWidth() && dm.getHeight() > maxSize.getHeight()) { // Update the max size found on this monitor maxSize.setSize(dm.getWidth(), dm.getHeight()); } // Do test if it will work here }
этот звонок даст вам информацию, которую вы хотите.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
это разрешение экрана, который данный компонент в настоящее время назначен (что-то вроде большей части корневого окна видно на этом экране).
public Rectangle getCurrentScreenBounds(Component component) { return component.getGraphicsConfiguration().getBounds(); }
использование:
Rectangle currentScreen = getCurrentScreenBounds(frameOrWhateverComponent); int currentScreenWidth = currentScreen.width // current screen width int currentScreenHeight = currentScreen.height // current screen height // absolute coordinate of current screen > 0 if left of this screen are further screens int xOfCurrentScreen = currentScreen.x
Если вы хотите уважать панели инструментов и т. д. вам также нужно будет рассчитать с этим:
GraphicsConfiguration gc = component.getGraphicsConfiguration(); Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
вот некоторый функциональный код (Java 8), который возвращает положение x самого правого края самого правого экрана. Если экраны не найдены, то он возвращает 0.
GraphicsDevice devices[]; devices = GraphicsEnvironment. getLocalGraphicsEnvironment(). getScreenDevices(); return Stream. of(devices). map(GraphicsDevice::getDefaultConfiguration). map(GraphicsConfiguration::getBounds). mapToInt(bounds -> bounds.x + bounds.width). max(). orElse(0);
вот ссылки на документация Javadoc.
GraphicsEnvironment.getLocalGraphicsEnvironment ()
GraphicsEnvironment.getScreenDevices ()
GraphicsDevice.getDefaultConfiguration ()
GraphicsConfiguration.getBounds ()
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width = screenSize.getWidth(); double height = screenSize.getHeight(); framemain.setSize((int)width,(int)height); framemain.setResizable(true); framemain.setExtendedState(JFrame.MAXIMIZED_BOTH);
эти три функции возвращают размер экрана в Java. Этот код учитывает настройки нескольких мониторов и панели задач. Включенные функции:getScreenInsets(),getScreenWorkingArea () и getScreenTotalArea ().
код:
/** * getScreenInsets, This returns the insets of the screen, which are defined by any task bars * that have been set up by the user. This function accounts for multi-monitor setups. If a * window is supplied, then the the monitor that contains the window will be used. If a window * is not supplied, then the primary monitor will be used. */ static public Insets getScreenInsets(Window windowOrNull) { Insets insets; if (windowOrNull == null) { insets = Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvironment .getLocalGraphicsEnvironment().getDefaultScreenDevice() .getDefaultConfiguration()); } else { insets = windowOrNull.getToolkit().getScreenInsets( windowOrNull.getGraphicsConfiguration()); } return insets; } /** * getScreenWorkingArea, This returns the working area of the screen. (The working area excludes * any task bars.) This function accounts for multi-monitor setups. If a window is supplied, * then the the monitor that contains the window will be used. If a window is not supplied, then * the primary monitor will be used. */ static public Rectangle getScreenWorkingArea(Window windowOrNull) { Insets insets; Rectangle bounds; if (windowOrNull == null) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); insets = Toolkit.getDefaultToolkit().getScreenInsets(ge.getDefaultScreenDevice() .getDefaultConfiguration()); bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds(); } else { GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration(); insets = windowOrNull.getToolkit().getScreenInsets(gc); bounds = gc.getBounds(); } bounds.x += insets.left; bounds.y += insets.top; bounds.width -= (insets.left + insets.right); bounds.height -= (insets.top + insets.bottom); return bounds; } /** * getScreenTotalArea, This returns the total area of the screen. (The total area includes any * task bars.) This function accounts for multi-monitor setups. If a window is supplied, then * the the monitor that contains the window will be used. If a window is not supplied, then the * primary monitor will be used. */ static public Rectangle getScreenTotalArea(Window windowOrNull) { Rectangle bounds; if (windowOrNull == null) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds(); } else { GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration(); bounds = gc.getBounds(); } return bounds; }
вот фрагмент кода, который я часто использую. Он возвращает всю доступную область экрана (даже при настройке нескольких мониторов), сохраняя при этом собственные позиции монитора.
public static Rectangle getMaximumScreenBounds() { int minx=0, miny=0, maxx=0, maxy=0; GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); for(GraphicsDevice device : environment.getScreenDevices()){ Rectangle bounds = device.getDefaultConfiguration().getBounds(); minx = Math.min(minx, bounds.x); miny = Math.min(miny, bounds.y); maxx = Math.max(maxx, bounds.x+bounds.width); maxy = Math.max(maxy, bounds.y+bounds.height); } return new Rectangle(minx, miny, maxx-minx, maxy-miny); }
на компьютере с двумя мониторами full-HD, где левый установлен в качестве основного монитора (в настройках Windows), функция возвращает
java.awt.Rectangle[x=0,y=0,width=3840,height=1080]
при той же настройке, но с правильным монитором, установленным в качестве основного монитора, функция возвращает
java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]