Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ImageIcon扩展到窗口之外,调整窗口大小将扩展所有组件,而不是显示更多组件_Java_User Interface_Imageicon - Fatal编程技术网

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

Java ImageIcon扩展到窗口之外,调整窗口大小将扩展所有组件,而不是显示更多组件,java,user-interface,imageicon,Java,User Interface,Imageicon,我在上面创建框架,然后创建8个面板。我创建了各种组件,并将它们添加到面板中,一切正常。直到我创建了一个ImageIcon并将其添加到标签,然后将该标签添加到第八个面板。使用的图像为140x129像素。问题是,只有顶层。。。。可能有四分之一的图像在显示。如果我更改代码中的帧尺寸,每个面板之间会创建更多的空白,但只会显示稍微多一点的图像,因此图像仍然不在屏幕上。我要说的是,窗口很容易为它显示的图像的每多一个像素增加10个像素的间距。如果我拖动窗口的角来展开它,同样的事情也会发生。如果窗口最大化,我仍

我在上面创建框架,然后创建8个面板。我创建了各种组件,并将它们添加到面板中,一切正常。直到我创建了一个ImageIcon并将其添加到标签,然后将该标签添加到第八个面板。使用的图像为140x129像素。问题是,只有顶层。。。。可能有四分之一的图像在显示。如果我更改代码中的帧尺寸,每个面板之间会创建更多的空白,但只会显示稍微多一点的图像,因此图像仍然不在屏幕上。我要说的是,窗口很容易为它显示的图像的每多一个像素增加10个像素的间距。如果我拖动窗口的角来展开它,同样的事情也会发生。如果窗口最大化,我仍然只能看到我现在非常拉伸的图像的一半多一点

我尝试过的事情:

  • 我的组件都没有设置首选尺寸,但我尝试为包含ImageIcon的label-then面板设置首选尺寸,它只在图像上方的灰色空间中添加了图像和首选尺寸之间的差异,将其进一步推离屏幕。所以,我解开了它

  • 将包含ImageIcon的标签添加到另一个面板(该面板不是第八个也是最后一个面板),在这种情况下,图像仍然被切断,但在其被切断的点上,其下方面板上的组件出现(位于切断图像的背景色上方)

  • 用大约30种不同的措辞方式彻底搜索这种情况,却找不到解决办法

  • (第1行-第8行是JPanel,我没有包括它们的编码)

    编辑:
    添加f.pack()会生成一个非常高的瘦窗口(窗口高度比我的屏幕高),但它仍然像我手动扩展窗口时一样(面板之间空白,图像部分脱离屏幕),即使我取出f.setBounds并仅使用f.setLocation。

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

    你可能应该使用一些不同的东西。我可以尝试在JFrame中使用BorderLayout,将包含前七个面板(在GridLayout中)的a面板放在中间,然后将JLabel放在JFrame的南部

    还有其他方法来布置,但这是我能想到的第一种方法。

    使网格中的每个单元格大小相同,每个单元格的大小由网格中包含的最大单元格决定

    在代码中,图标是最大的组件,并且网格中只有一列,因此每一行的高度都与图标相同

    由于还可以通过调用方法
    setBounds()
    来限制
    JFrame
    的大小,因此Swing基础结构会切断图标,以便所有组件都符合指定的边界

    一种替代方法(但不是唯一的方法)是使用,因为它使用每个包含组件的首选尺寸

    下面是一个示例GUI,它与您发布的屏幕截图相匹配,并使用
    BoxLayout

    import static javax.swing.WindowConstants.EXIT\u ON\u CLOSE;
    导入java.awt.BorderLayout;
    导入java.awt.EventQueue;
    导入java.net.URL;
    导入javax.swing.BoxLayout;
    导入javax.swing.Icon;
    导入javax.swing.ImageIcon;
    导入javax.swing.JButton;
    导入javax.swing.JFrame;
    导入javax.swing.JLabel;
    导入javax.swing.JPanel;
    导入javax.swing.JRadioButton;
    导入javax.swing.JTextField;
    公共类Shapes23实现可运行{
    私有JFrame;
    @重写//java.lang.Runnable
    公开募捐{
    showGui();
    }
    私有JPanel CreateEighthow(){
    JPanel=新的JPanel();
    URL=getClass().getResource(“paintbursht.jpg”);
    Icon ico=新图像图标(url);
    JLabel标签=新的JLabel(ico);
    添加(标签);
    回投;
    }
    私有JPanel CreateFiftThrow(){
    JPanel fifthorn=新的JPanel();
    JTextField textField=新的JTextField(20);
    添加(文本字段);
    回投;
    }
    私有JPanel createFirstRow(){
    JPanel firstRow=新的JPanel();
    JLabel标签=新的JLabel(“二维形状”);
    第一行。添加(标签);
    返回第一行;
    }
    私有JPanel createFourthRow(){
    JPanel fourthRow=新的JPanel();
    添加(createRadioButton(“球体”));
    添加(createRadioButton(“立方体”));
    添加(createRadioButton(“Cone”));
    添加(createRadioButton(“圆柱体”));
    添加(createRadioButton(“圆环”));
    回击四投;
    }
    私有JPanel createMainPanel(){
    JPanel mainPanel=新的JPanel();
    BoxLayout布局=新的BoxLayout(主面板,BoxLayout.PAGE_轴);
    主面板。设置布局(布局);
    添加(createFirstRow());
    添加(createSecondRow());
    添加(createThirdRow());
    添加(createFourthRow());
    添加(createfifthorn());
    添加(createSixthRow());
    添加(createSeventhRow());
    添加(createEightrow());
    返回主面板;
    }
    私有JRadioButton createRadioButton(字符串文本){
    JRadioButton radioButton=新的JRadioButton(文本);
    返回单选按钮;
    }
    私有JPanel createSecondRow(){
    JPanel secondRow=新的JPanel();
    添加(createRadioButton(“圆圈”));
    添加(createRadioButton(“矩形”);
    添加(createRadioButton(“方形”));
    添加(createRadioButton(“三角形”));
    返回第二行;
    }
    私有JPanel createSeventhRow(){
    JPanel seventhRow=新的JPanel();
    JButton按钮=新JButton(“输入”);
    第七行。添加(按钮);
    
    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);
            }
        });
    }
    
        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);