java - 正确对齐面板与背景?

标签 java awt panel frame

几周前我刚开始使用 Java GUI,但我在对齐方面遇到了困难。 基本上,我试图让两个面板具有不同的背景图像(顶部栏和内容),我想一个接一个地对齐它们。 问题是,我不能使用 BorderLayout.NORTHBorderLayout.SOUTH,因为背景图像失去了原来的大小并且变得非常小。

如何在不丢失原始尺寸的情况下正确对齐它们?

这是我的代码:

package main;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageTest {

  public static void main(String[] args) {
    ImageFrame frame = new ImageFrame("topBar.png", "contentImage.png");
    frame.setSize(640,480);
    frame.setVisible(true);
  }
}

class ImagePanel extends JPanel {

private Image img;

public ImagePanel(String img) {
    this(new ImageIcon(img).getImage());    
}

public ImagePanel(Image img) {
    this.img = img;
}

public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
}

}

class ImageFrame extends JFrame {
public ImageFrame(String topBar, String body) {
    setLayout(new BorderLayout());
    ImagePanel topPanel = new ImagePanel(topBar);
    ImagePanel bodyPanel = new ImagePanel(body);
    add(topPanel, BorderLayout.NORTH);
    add(bodyPanel, BorderLayout.SOUTH);
    pack();
}
}

最佳答案

有很多问题突然出现在我面前

  1. 您没有调用 super.paintComponent。这是非常重要的,不能低估
  2. 你真的应该使用 ImageIO 来加载你的图像。事实上,它支持更广泛的图像格式,它还可以并发加载图像并在出现问题时抛出有用的异常
  3. 您没有提供任何 preferredSize 值。布局管理器使用它来决定如何最好地布局您的组件。不过请记住,这只是提示,布局管理员完全有权忽略它们

查看 Reading/Loading an Image有关 ImageIO

的更多详细信息

关于java - 正确对齐面板与背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472037/

相关文章:

java - 填写 JasperReports 报告时出现意外异常 - 无法初始化 net.sf.jasperreports.engine.util.JRStyledTextParser (GWT)

Java JOGL : How can create an image using both GL and Graphics?

java - 有没有办法在使用java锁定窗口时获取屏幕截图?

extjs - 如何在 Extjs 中隐藏面板?

css - 设置面板高度 sencha -touch

c# - 删除某些控件后如何删除(删除)文本框之间的空间?

java - 将 JSlider 放入 java 代码中...?

java - 添加只有管理员可见的露天空间

java - 使用多态性打印字符串出现次数

java - 隐写术程序给出奇怪的结果