Swing-如何将我的应用限制为屏幕尺寸

问题描述 投票:0回答:1

在我的应用中,我需要一个窗口来显示图像查看器,但具有以下尺寸限制:

  • 如果图像较小,则窗口会根据图像调整其大小,并且不显示滚动条
  • 如果图像很大,窗口也会调整,但是整个应用应该在屏幕上保持可见,如果需要,在图像周围会出现滚动条

目标是使图像上方和下方的UI保持可见。

我为演示编写了以下代码,但是当图像较大时,该应用程序总是比屏幕大...

任何想法正确的方法是吗?

import javax.swing.*;
import java.awt.*;

public class ScrollTest {
    private static final int IMG_WIDTH = 2000; // or 500
    private static final int IMG_HEIGHT = 2000; // or 500

    // Unsuccessful attempts:
    private static void limitAppSize(JFrame frame) {
        frame.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
//        frame.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
        frame.pack();
    }

    public static void addComponentsToPane(Container container) {
        container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
        JPanel imagePanel = new JPanel() {
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2d = (Graphics2D) g.create();
                // Image replaced by a shape for demonstration purpose
                g2d.drawOval(0,0, IMG_WIDTH, IMG_HEIGHT);
            }
            public Dimension getPreferredSize() {
                return new Dimension(IMG_WIDTH, IMG_HEIGHT);
            }
            public Dimension getMaximumSize() {
                return new Dimension(IMG_WIDTH, IMG_HEIGHT);
            }
        };

        JScrollPane scrollableImagePanel = new JScrollPane(imagePanel);
        container.add(new JLabel("This would be a toolbar menu with multiple lines"));
        container.add(scrollableImagePanel);
        container.add(new JLabel("This would be a status bar"));
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("ScrollTest");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addComponentsToPane(frame.getContentPane());
        limitAppSize(frame);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGUI());
    }
}
java swing window screen
1个回答
1
投票

框架将调整为屏幕大小,而忽略任务栏的大小。

© www.soinside.com 2019 - 2024. All rights reserved.