在我的应用中,我需要一个窗口来显示图像查看器,但具有以下尺寸限制:
目标是使图像上方和下方的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());
}
}
框架将调整为屏幕大小,而忽略任务栏的大小。