a

Câu hỏi Kích thước của biểu tượng khung được sử dụng trong Swing


Chúng ta có thể sử dụng một danh sách để khởi tạo các biểu tượng cửa sổ bằng cách sử dụng Window.setIconImages(List<? extends Image>). Các kích thước khác nhau của các biểu tượng thường được sử dụng trong một JFrame?

Mã số

Mã này chuyển 64 hình ảnh có kích thước khác nhau (từ 16x16, tăng thêm 2) thành các biểu tượng cho danh sách.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class FrameIconList {

    public static BufferedImage getImage(int size, Color color) {
        BufferedImage i = new BufferedImage(
                size, size, BufferedImage.TYPE_INT_RGB);

        Graphics2D g = i.createGraphics();

        g.setColor(color);
        g.fillRect(0, 0, size, size);
        g.setColor(Color.BLACK);
        int off = (size>17 ? 3 : 1);
        if (off>1) g.drawRect(0, 0, size-1, size-1);
        g.drawString("" + size, off, size-off);

        g.dispose();

        return i;
    }

    public static void main(String[] args) {
        final Color[] colors = {
            Color.GREEN,
            Color.RED,
            Color.YELLOW,
            Color.WHITE,
            Color.CYAN,
            Color.MAGENTA,
            Color.PINK,
            Color.ORANGE
        };

        int s = 64;
        final int[] sizes = new int[s];

        for (int ii=0; ii<sizes.length; ii++) {
            sizes[ii] = 16+(ii*2);
        }

        Runnable r = new Runnable() {

            @Override
            public void run() {
                // the GUI as seen by the user (without frame)
                JPanel gui = new JPanel(new BorderLayout());
                gui.setBorder(new EmptyBorder(2, 3, 2, 3));
                gui.setBackground(Color.WHITE);

                ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
                Vector<ImageIcon> icons = new Vector<ImageIcon>();
                for (int ii=0; ii< sizes.length; ii++) {
                    BufferedImage bi = getImage(
                            sizes[ii], 
                            colors[ii%colors.length]);
                    images.add(bi);
                    ImageIcon imi = new ImageIcon(bi);
                    icons.add(imi);
                }
                JList list = new JList(icons);
                list.setVisibleRowCount(6);
                gui.add(new JScrollPane(list));

                JFrame f = new JFrame("Icon size usage");
                f.setIconImages(images);
                f.add(gui);
                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

26
2017-08-14 05:56


gốc




Các câu trả lời:


Quan điểm điển hình cho máy tính chạy Windows 7 này

Lưu ý: @bobbel báo cáo cùng kích thước được sử dụng cho Windows 10.

Khung - 20x20

Icon Size Usage - showing 20x20 frame icon

Thanh tác vụ - 40x40 trong thanh tác vụ, ứng dụng di chuột hiển thị 20x20

Icon Size Usage - Task Bar

Windows + Tab - 20x20

Icon Size Usage - Windows+Tab

Alt + Tab - 40x40 ở phía dưới bên phải, thu nhỏ 20x20 ở phía trên bên trái.

Icon Size Usage - Alt+Tab

Trình quản lý tác vụ - 20x20

Icon Size Usage - Task Manager


28
2017-08-14 05:56



Chỉ cần thử nghiệm: tất cả các kích thước tương tự trong Win10, quá. - bobbel


@mKorbel Huh .. không nhận ra sẽ có sự khác biệt ở đó.   Vâng, quy tắc tùy chọn người dùng / hệ điều hành trên mong đợi của lập trình viên! ;)

  • câu trả lời chỉ là về Win8 (ent, 64b ....) / WinXP (không được đề cập, nhưng thiết lập là khá similair)

  • có một tùy chọn khác, vui lòng xem Lỗi hoặc tính năng: Swing font gui mặc định không chính xác cho Win6 + bởi @kleopatra, v.v.

  • có thể đặt biểu tượng 64x64 trên máy tính để bàn trong win8

  • ví dụ. cài đặt của tôi (không phải là cá nhân hóa đồ họa nâng cao, mặc dù thực tế tôi là quản trị viên Win2008 / 12, blablabla- "để lại chủ nghĩa siêu thực với màu sắc đảo ngược, bây giờ chỉ với màu đen và màu da cam" -end blablabla)

enter image description here

  • tạo ra

enter image description here

  • cài đặt tiêu chuẩn (chỉ được bỏ đánh dấu Sử dụng các nút thanh tác vụ nhỏ)

enter image description here

  • cửa sổ của bạn trên màn hình của tôi

enter image description here


12
2017-08-14 07:15





Có vẻ như không có biểu tượng Khung hoặc Dock khi chạy trong Mac OS X 10.9 (Mavericks):

Lack of Java Swing icons in Mac OS X 10.9 (Mavericks)

Ngoài ra, không có biểu tượng trong Activity Monitor:

enter image description here


11
2018-02-21 21:18



Triển khai một ứng dụng Java trên Mac không dễ như trên Windows để cho nó cảm thấy có nguồn gốc. Các bước ban đầu là gói ứng dụng Java của bạn trong một thư mục .app với một tệp mô tả Info.plist trong đó, lần lượt trỏ đến một biểu tượng có thể được sử dụng cho ứng dụng. Xem đây. - Timmos
@EthanB, giải pháp duy nhất tôi tìm thấy là java -Xdock:name="My App" -Xdock:icon="/path/to/myicon.icns" - tresf


Ubuntu 12.04 LTS

Kích thước biểu tượng trên thanh tác vụ có thể được thay đổi giữa 32 và 64, nhưng tất cả thời gian sử dụng biểu tượng 32x32. Tôi cũng đã biên dịch lại chương trình, nhưng vẫn sử dụng cùng một biểu tượng.

Thanh tác vụ và cửa sổ (không có biểu tượng ở cửa sổ).

enter image description here

Alt + Tab

enter image description here

không có biểu tượng nào tại trình quản lý tác vụ


10
2018-02-22 22:37





Tôi đã tìm ra một điều thú vị trên Win10 (cũng có thể đúng với Win7 và Win8, nhưng tôi chưa thử nó).

Theo mặc định, Win10 sẽ sử dụng kích thước hình ảnh 20x20 (nhỏ) và 40x40 (lớn).

Vì vậy, nếu bạn bắt đầu kích thước hình ảnh của mình tại 22? Nó sẽ sử dụng kích thước hình ảnh 30x30 (nhỏ) và 40x40 (lớn)!

Tạo toàn bộ bảng cho thấy các hành vi thú vị (các thử nghiệm giữa các kích thước bắt đầu được thử nghiệm dẫn đến các kích thước trước đó; 4 cũng sẽ dẫn đến 20x20 và 40x40):

Nếu bạn bắt đầu tại 2, nó sẽ sử dụng 20x20 và 40x40.
Nếu bạn bắt đầu tại 22, nó sẽ sử dụng 30x30 và 40x40.
Nếu bạn bắt đầu tại 32, nó sẽ sử dụng cho cả hai 40x40.
Nếu bạn bắt đầu tại 42, nó sẽ sử dụng cho cả hai 60x60.
Nếu bạn bắt đầu tại 62, nó sẽ sử dụng 78x78 và 80x80.
Nếu bạn bắt đầu tại 80, nó sẽ sử dụng cho cả hai 80x80.
Nếu bạn bắt đầu tại 82, nó sẽ sử dụng 98x98 và 120x120.
Nếu bạn bắt đầu tại 100, nó sẽ sử dụng 100x100 và 120x120.
Nếu bạn bắt đầu tại 102, nó sẽ sử dụng 118x118 và 120x120.
Nếu bạn bắt đầu tại 120, nó sẽ sử dụng cho cả hai 120x120.
Nếu bạn bắt đầu tại 122, nó sẽ sử dụng 138x138 và 158x158.
... được rồi ...

Tôi không thực sự nhận được mô hình phía sau, nhưng tôi thấy nó rất thú vị ...

Cuối cùng nó thực sự tùy thuộc vào bạn, kích thước bạn cung cấp. Mỗi hệ điều hành có logic riêng của nó để hiển thị các biểu tượng cụ thể. Hoặc là nó sẽ được phóng to hoặc thu nhỏ nếu bạn không cung cấp kích thước hình ảnh chính xác cho từng hệ điều hành.


2
2017-12-06 22:43