【问题标题】:Add BufferedImage to JFrame with JScrollPane使用 JScrollPane 将 BufferedImage 添加到 JFrame
【发布时间】:2013-10-26 22:45:33
【问题描述】:

我想在一个大的BufferedImage 中画一些图,然后在JFrameJScrollPane 中显示。我尝试了以下方法

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

public class FrameImage {
    private static void createAndShowGUI() {
       BufferedImage image;
       Graphics bufG;
       JFrame frame;
       JPanel panel;
       JLabel picLabel;

       frame = new JFrame("FrameTest");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       image=new BufferedImage(400, 300, BufferedImage.TYPE_INT_ARGB);
       bufG=image.createGraphics();
       bufG.setColor(Color.red);
       bufG.drawString("Testing",100,100);

       panel = new JPanel();
       panel.setBackground(Color.BLUE);
       panel.setPreferredSize(new Dimension(1500, 1500));
       panel.setLayout(null);
       picLabel = new JLabel(new ImageIcon(image));
       panel.add(picLabel);

       frame.add(new JScrollPane(panel));
       frame.setVisible(true);
       frame.setSize(800, 500);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

但是文本“Testing”没有出现在我的 JFrame 中。我在这里错过了什么?

【问题讨论】:

    标签: java image swing jscrollpane layout-manager


    【解决方案1】:

    如果我注释掉这一行

    panel.setLayout(null);
    

    我看到您的 JLabel 出现了图像。您需要调整布局才能显示出来。

    【讨论】:

    • OP - 除了上面的优秀建议。 Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them,以及 white space 的布局填充和边框。
    • 不同意 - 取决于要求。布局管理器仅在您希望 UI 灵活并占用所有可用空间时才有用。如果您正在设计一个旨在保持固定尺寸的 GUI(也许它太复杂而无法使用动态布局)或者您的 UI 已经被压缩以占用尽可能少的空间(仅此而已),那么布局不会提供任何 AFAIK。使用管理器来定位几个控制面板很好,但是对于一个相当复杂的 UI,在某些时候你通常最好坚持绝对位置。诚然,LAF 问题是一个主要的例外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2012-11-03
    • 2017-03-03
    • 1970-01-01
    • 2012-11-07
    • 2012-11-17
    相关资源
    最近更新 更多