java - ImageIcon 扩展到窗口之外,调整窗口大小会扩展所有组件而不是显示更多

标签 java user-interface imageicon

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 个像素的间距。如果我拖动窗口的角来展开它,同样的事情也会发生。如果窗口最大化,我仍然只能看到我现在非常拉伸(stretch)的图像的一半多一点。

我尝试过的事情:

  1. 我的组件都没有设置首选尺寸,但我尝试为标签设置首选尺寸,然后是包含 ImageIcon 的面板,它只在图像上方的灰色空间中添加了图像和首选尺寸之间的差异,将它推得更远。所以,我取消了。

  2. 将包含 ImageIcon 的标签添加到另一个不是第 8 个和最后一个面板的面板,在这种情况下,图像仍然被切断,但在它被切断的时候,它下面的面板出现(在切断图像的背景颜色之上)。

  3. 用大约 30 种不同的措辞方式对这种情况进行了详尽的谷歌搜索,但没有找到解决方案。

(第 1 行 - 第 8 行是 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);

Window at execution

Window when stretched

编辑: 添加 f.pack() 会产生一个非常高的瘦窗口(窗口高度比我的屏幕高),但当我手动展开窗口时它仍然看起来像(面板之间的空白区域,图像部分在屏幕外),即使我取出 f. setBounds 并且只使用 f.setLocation。

最佳答案

您正在使用 GridLayout。这为所有封闭的面板提供了相同的空间量。在这种情况下,它是一个垂直网格。

您可能应该使用一些不同的东西。我可能会尝试在 JFrame 中使用 BorderLayout,并将包含前七个面板的面板(在 GridLayout 中)放入 CENTER,然后将 JLabel 放入 JFrame 的 SOUTH 部分。

还有其他布局方式,但这是我首先想到的。

关于java - ImageIcon 扩展到窗口之外,调整窗口大小会扩展所有组件而不是显示更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64300905/

相关文章:

java - 我想从我的服务启动线程,这样操作就不会在 android 的主线程中运行

java - 在类构造函数中实例化 ArrayList

python - 如何防止 tkinter python 中的 float 小部件

java - JTable 单元格中的图像显示

java - 单击背景 jFrame 后,jPopupMenu 未隐藏

java - 使用 Hibernate (JSR 303) 方法验证来比较参数

c# - Xamarin.Forms FlexLayout 将大小调整为最大值

image - 多轴上的 Matlab GUI roipoly

java - 将图像添加到 JFrame 时出现问题

java - java中的ImageIcon