Ekran çözünürlüğü (genişlik x yükseklik) piksel olarak nasıl elde edilebilir?
Bir JFrame ve java swing yöntemleri kullanıyorum.
Ekran çözünürlüğü (genişlik x yükseklik) piksel olarak nasıl elde edilebilir?
Bir JFrame ve java swing yöntemleri kullanıyorum.
Yanıtlar:
Ekran boyutunu Toolkit.getScreenSize()
yöntemle alabilirsiniz.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
Çoklu monitör yapılandırmasında şunları kullanmalısınız:
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
Ekran çözünürlüğünü DPI olarak almak istiyorsanız, getScreenResolution()
yöntemi kullanmanız gerekir Toolkit
.
Kaynaklar:
getScreenSize
1920x1080 döndürüyor.
Bu kod sistemdeki grafik aygıtlarını numaralandırır (birden çok monitör yüklüyse) ve bu bilgileri monitör benzeşimini veya otomatik yerleşimi belirlemek için kullanabilirsiniz (bazı sistemler bir uygulama çalışırken gerçek zamanlı ekranlar için küçük bir yan monitör kullanır arka plan ve böyle bir monitör boyut, ekran renkleri vb. ile tanımlanabilir):
// 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
}
Bu çağrı size istediğiniz bilgileri verecektir.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Bu, söz konusu bileşenin şu anda atanmış olduğu ekranın çözünürlüğüdür (kök pencerenin çoğu kısmı gibi bir şey o ekranda görülebilir).
public Rectangle getCurrentScreenBounds(Component component) {
return component.getGraphicsConfiguration().getBounds();
}
Kullanımı:
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
Araç çubuklarına vb. Saygı göstermek istiyorsanız, bununla da hesaplamanız gerekir:
GraphicsConfiguration gc = component.getGraphicsConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
İşte en sağdaki ekranın en sağ kenarının x konumunu döndüren bazı işlevsel kod (Java 8). Hiçbir ekran bulunmazsa, 0 değerini döndürür.
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);
İşte JavaDoc'a bağlantılar.
GraphicsEnvironment.getLocalGraphicsEnvironment ()
GraphicsEnvironment.getScreenDevices ()
GraphicsDevice.getDefaultConfiguration ()
GraphicsConfiguration.getBounds ()
Bu üç işlev, Java'daki ekran boyutunu döndürür. Bu kod, çoklu monitör kurulumlarını ve görev çubuklarını açıklar. Dahil edilen işlevler şunlardır: getScreenInsets () , getScreenWorkingArea () ve getScreenTotalArea () .
Kod:
/**
* 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;
}
int resolution =Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(resolution);
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);
İşte sık kullandığım bir kod pasajı. Yerel monitör konumlarını korurken kullanılabilir tam ekran alanını (çoklu monitör kurulumlarında bile) döndürür.
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);
}
Sol ekranın ana monitör olarak ayarlandığı iki tam HD monitörü olan bir bilgisayarda (Windows ayarlarında), işlev geri döner
java.awt.Rectangle[x=0,y=0,width=3840,height=1080]
Aynı kurulumda, ancak sağ monitör ana monitör olarak ayarlandığında, işlev geri döner
java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]
int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(""+screenResolution);