几周前我刚开始使用 Java GUI,但我在对齐方面遇到了困难。
基本上,我试图让两个面板具有不同的背景图像(顶部栏和内容),我想一个接一个地对齐它们。
问题是,我不能使用 BorderLayout.NORTH
和 BorderLayout.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();
}
}
最佳答案
有很多问题突然出现在我面前
- 您没有调用
super.paintComponent
。这是非常重要的,不能低估 - 你真的应该使用
ImageIO
来加载你的图像。事实上,它支持更广泛的图像格式,它还可以并发加载图像并在出现问题时抛出有用的异常 - 您没有提供任何
preferredSize
值。布局管理器使用它来决定如何最好地布局您的组件。不过请记住,这只是提示,布局管理员完全有权忽略它们
查看 Reading/Loading an Image有关 ImageIO
关于java - 正确对齐面板与背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472037/