Helpex - Trao đổi & giúp đỡ Đăng nhập
124

Làm thế nào người ta có thể có được độ phân giải màn hình (chiều rộng x chiều cao) bằng pixel?

Tôi đang sử dụng một JFrame và các phương thức swing java.

124 hữu ích 2 bình luận 205k xem chia sẻ
10 trả lời 10
245

Bạn có thể có được kích thước màn hình với Toolkit.getScreenSize()phương pháp.

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

Trên cấu hình đa màn hình, bạn nên sử dụng:

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

Nếu bạn muốn có độ phân giải màn hình trong DPI, bạn sẽ phải sử dụng getScreenResolution()phương pháp trên Toolkit.


Tài nguyên :

245 hữu ích 1 bình luận chia sẻ
15

Mã này sẽ liệt kê các thiết bị đồ họa trên hệ thống (nếu nhiều màn hình được cài đặt) và bạn có thể sử dụng thông tin đó để xác định mối quan hệ của màn hình hoặc vị trí tự động (một số hệ thống sử dụng màn hình phụ nhỏ để hiển thị trong thời gian thực khi ứng dụng đang chạy nền và màn hình như vậy có thể được xác định theo kích thước, màu màn hình, v.v.):

// 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
}
15 hữu ích 0 bình luận chia sẻ
11

Cuộc gọi này sẽ cung cấp cho bạn thông tin bạn muốn.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
11 hữu ích 1 bình luận chia sẻ
3

Đây là độ phân giải của màn hình mà thành phần đã cho hiện được gán (một cái gì đó giống như hầu hết các phần của cửa sổ gốc được hiển thị trên màn hình đó).

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

Sử dụng:

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

Nếu bạn muốn tôn trọng các thanh công cụ, v.v. bạn cũng sẽ cần tính toán với điều này:

GraphicsConfiguration gc = component.getGraphicsConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
3 hữu ích 0 bình luận chia sẻ
3

Đây là một số mã chức năng (Java 8) trả về vị trí x của cạnh phải nhất của màn hình bên phải nhất. Nếu không tìm thấy màn hình thì nó trả về 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);

Dưới đây là các liên kết đến JavaDoc.

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

3 hữu ích 0 bình luận chia sẻ
1
int resolution =Toolkit.getDefaultToolkit().getScreenResolution();

System.out.println(resolution);
1 hữu ích 0 bình luận chia sẻ
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);
1 hữu ích 0 bình luận chia sẻ
1

Ba hàm này trả về kích thước màn hình trong Java. Mã này chiếm các thiết lập đa màn hình và thanh tác vụ. Các hàm bao gồm là: getScreenInsets () , getScreenWorkingArea ()getScreenTotalArea () .

Mã số:

/**
 * 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;
}
1 hữu ích 0 bình luận chia sẻ
1

Đây là một đoạn mã tôi thường sử dụng. Nó trả về toàn bộ diện tích màn hình có sẵn (ngay cả trên các thiết lập đa màn hình) trong khi vẫn giữ các vị trí màn hình gốc.

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

Trên máy tính có hai màn hình full-HD, trong đó màn hình bên trái được đặt làm màn hình chính (trong cài đặt Windows), chức năng sẽ trả về

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

Trên cùng một thiết lập, nhưng với màn hình bên phải được đặt làm màn hình chính, chức năng sẽ trả về

java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]
1 hữu ích 0 bình luận chia sẻ
0
int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(""+screenResolution);
0 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java swing screen resolution , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading