【发布时间】:2020-10-11 05:32:19
【问题描述】:
private void setupGUI(){
// Setup Frame
f = new JFrame("Shape Image Generator");
f.setBounds(500, 150, 450, 350);
f.setLayout(new GridLayout(8,1));
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
}
我创建了上面的框架,然后创建了 8 个面板。我创建了各种组件并将它们添加到面板中,一切正常。直到我创建了一个 ImageIcon 并将其添加到标签并将该标签添加到第 8 个面板。使用的图像为 140x129 像素。问题是,只有顶部......可能显示了 1/4 的图像。如果我在代码中更改框架尺寸,则会在每个面板之间创建更多空白空间,但只显示更多的图像,因此图像仍然不在屏幕上。我会说窗口很容易为它显示的图像每增加 1 个像素添加 10 个像素的间距。如果我拖动窗口的角来展开它,也会发生同样的事情。如果窗口最大化,我仍然只能看到现在非常拉伸的图像的一半多一点。
我尝试过的事情:
-
我的组件都没有设置首选尺寸,但我尝试为标签设置首选尺寸,然后是包含 ImageIcon 的面板,它只在图像上方的灰色空间中添加了图像和首选尺寸之间的差异,进一步推动了它屏幕外。所以,我取消了那个。
-
将包含 ImageIcon 的标签添加到不是第 8 个也是最后一个面板的不同面板,在这种情况下,图像仍然被切断,但在它被切断时,它下面的面板上的组件出现(在切断图像的背景颜色之上)。
-
用大约 30 种不同的措辞方式对这种情况进行了详尽的谷歌搜索,但没有找到解决方案。
(row1 - row8 是 JPanel,我没有包含它们的编码)
ImageIcon iconStart = createImageIcon("/images/ShapeClipart.png", "Shapes");
JLabel imgLabel = new JLabel();
row8.add(imgLabel);
// Add image to image label
imgLabel.setIcon(iconStart);
// Add panels to frame
f.add(row1);
f.add(row2);
f.add(row3);
f.add(row4);
f.add(row5);
f.add(row6);
f.add(row7);
f.add(row8);
f.setVisible(true);
编辑: 添加 f.pack() 会产生一个非常高的瘦窗口(窗口高度比我的屏幕高)但是当我手动扩展窗口时它看起来仍然像(面板之间的空白,图像部分在屏幕外),即使我取出 f. setBounds 并且只使用 f.setLocation。
【问题讨论】:
-
如果你打电话给
f.pack(),那么你不应该打电话给f.setBounds()。此外,不要更改JFrame布局,而是将所有“行”添加到单独的JPanel(带有GridLayout)并将该面板添加到JFrame。您是否有机会发布指向您正在使用的图标的链接? -
您尚未发布minimal reproducible example,因此我无法尝试重现您的问题。在任何情况下,不同的布局管理器可能更合适。也许
BoxLayout?你见过Laying Out Components Within a Container吗?
标签: java user-interface imageicon