Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JScrollPane将BuffereImage添加到JFrame_Java_Image_Swing_Jscrollpane_Layout Manager - Fatal编程技术网

Java 使用JScrollPane将BuffereImage添加到JFrame

Java 使用JScrollPane将BuffereImage添加到JFrame,java,image,swing,jscrollpane,layout-manager,Java,Image,Swing,Jscrollpane,Layout Manager,我想在一个大的BufferedImage中做一些绘图,然后在JFrame中用JScrollPane展示它。我尝试了以下方法 import java.awt.*; import java.awt.image.*; import javax.swing.*; public class FrameImage { private static void createAndShowGUI() { BufferedImage image; Graphics bufG;

我想在一个大的
BufferedImage
中做一些绘图,然后在
JFrame
中用
JScrollPane
展示它。我尝试了以下方法

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中。我在这里遗漏了什么?

如果我把这行注释掉

panel.setLayout(null);

我看到你的JLabel和图像出现了。除了上面的建议外,您还需要对布局进行调整,以使其显示出来。

OP。javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。为了组织一个健壮的GUI组件,可以使用布局管理器,或者,以及布局填充和边框。不一致-取决于需求。布局管理器只有在您希望UI灵活并占用所有可用空间时才有用。如果你设计的GUI是为了保持一个固定的维度(可能它太复杂了,不需要动态布局),或者你的UI已经被压缩到尽可能少的占用空间(没有更多),那么布局毫无用处。使用一个管理器来定位几个控制面板是可以的,但是对于一个相当复杂的UI,在某些情况下,您通常最好坚持绝对位置。诚然,LAF问题是这方面的一个重大例外。