Bagaimana saya bisa mendapatkan resolusi layar di java?

136

Bagaimana seseorang bisa mendapatkan resolusi layar (lebar x tinggi) dalam piksel?

Saya menggunakan JFrame dan metode ayunan java.

AndreDurao
sumber
2
dapatkah Anda memberikan lebih banyak detail tentang apa yang Anda pertanyakan. Satu kalimat dapat menghasilkan ratusan cara berbeda.
Anil Vishnoi
7
Saya kira Anda tidak peduli dengan beberapa pengaturan monitor. Sepertinya banyak pengembang aplikasi yang mengabaikan ini. Setiap orang menggunakan banyak monitor di tempat saya bekerja, jadi kami harus selalu memikirkannya. Kami menyelidiki semua monitor dan mengaturnya sebagai objek layar sehingga kami dapat menargetkannya saat kami membuka bingkai baru. Jika Anda benar-benar tidak membutuhkan fungsi ini, saya rasa tidak apa-apa jika Anda mengajukan pertanyaan terbuka dan menerima jawaban dengan begitu cepat.
Erick Robertson

Jawaban:

271

Anda bisa mendapatkan ukuran layar dengan Toolkit.getScreenSize()metode ini.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();

Pada konfigurasi multi-monitor, Anda harus menggunakan ini:

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();

Jika Anda ingin mendapatkan resolusi layar dalam DPI, Anda harus menggunakan getScreenResolution()metode ini Toolkit.


Sumber:

Colin Hebert
sumber
4
Ini tidak berhasil untuk saya. Saya memiliki monitor 3840x2160, tetapi getScreenSizemengembalikan 1920x1080.
ZhekaKozlov
15

Kode ini akan menghitung perangkat grafis pada sistem (jika beberapa monitor dipasang), dan Anda dapat menggunakan informasi tersebut untuk menentukan afinitas monitor atau penempatan otomatis (beberapa sistem menggunakan monitor samping kecil untuk tampilan waktu nyata saat aplikasi berjalan di latar belakang, dan monitor semacam itu dapat diidentifikasi berdasarkan ukuran, warna layar, dll.):

// 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
}
Rick Hodgin
sumber
11

Panggilan ini akan memberi Anda informasi yang Anda inginkan.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Starkey
sumber
Ini hanya akan memberikan dimensi tampilan utama pada sistem multi-monitor. Lihat docs.oracle.com/javase/8/docs/api/java/awt/…
Nathan
4

Berikut beberapa kode fungsional (Java 8) yang mengembalikan posisi x dari tepi paling kanan dari layar paling kanan. Jika tidak ada layar yang ditemukan, maka ia mengembalikan 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);

Berikut adalah tautan ke JavaDoc.

GraphicsEnvironment.getLocalGraphicsEnvironment ()
GraphicsEnvironment.getScreenDevices ()
GraphicsDevice.getDefaultConfiguration ()
GraphicsConfiguration.getBounds ()

Nathan
sumber
3

Ini adalah resolusi layar yang saat ini diberikan komponen tertentu (sesuatu seperti sebagian besar jendela root terlihat di layar itu).

public Rectangle getCurrentScreenBounds(Component component) {
    return component.getGraphicsConfiguration().getBounds();
}

Pemakaian:

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

Jika Anda ingin menghormati bilah alat, dll. Anda juga harus menghitung dengan ini:

GraphicsConfiguration gc = component.getGraphicsConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
jan
sumber
2

Ketiga fungsi ini mengembalikan ukuran layar di Java. Kode ini menjelaskan pengaturan multi-monitor dan bilah tugas. Fungsi yang disertakan adalah: getScreenInsets () , getScreenWorkingArea () , dan getScreenTotalArea () .

Kode:

/**
 * 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;
}
BlakeTNC
sumber
1
int resolution =Toolkit.getDefaultToolkit().getScreenResolution();

System.out.println(resolution);
Eric Warriner
sumber
1
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);
Ajeeth Kumar
sumber
1

Berikut adalah potongan kode yang sering saya gunakan. Ini mengembalikan area layar penuh yang tersedia (bahkan pada pengaturan multi-monitor) sambil mempertahankan posisi monitor asli.

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);
}

Di komputer dengan dua monitor full-HD, di mana monitor kiri ditetapkan sebagai monitor utama (dalam pengaturan Windows), fungsi ini kembali

java.awt.Rectangle[x=0,y=0,width=3840,height=1080]

Pada pengaturan yang sama, tetapi dengan monitor kanan ditetapkan sebagai monitor utama, fungsi tersebut kembali

java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]
Myrka
sumber
0
int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(""+screenResolution);
chamindu ilshan
sumber
Selamat datang di Stack Overflow! Meskipun cuplikan kode ini dapat menyelesaikan pertanyaan, menyertakan penjelasan sangat membantu meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa mendatang, dan orang-orang itu mungkin tidak tahu alasan saran kode Anda. Harap juga mencoba untuk tidak membanjiri kode Anda dengan komentar penjelasan, ini mengurangi keterbacaan kode dan penjelasannya!
kayess