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问题是这方面的一个重大例外。