ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java:如何在GridLayout中嵌套JPanel?

2019-06-29 06:49:31  阅读:182  来源: 互联网

标签:java image swing jpanel grid-layout


我想知道如何使用GridLayout嵌套JPanels.它应该是这样的.

到目前为止,我通过两种方式解决了这个问题,

>使用JPanels和
>使用JLabels,

并且它们都没有工作(仅显示创建的第一个面板).

以下是JPanel方法的代码:

    int x=20, y=20;
    JPanel [] panels = new JPanel[3];
    JLabel animal = new JLabel(new ImageIcon(getClass().getResource("Pictures/animal.gif")));
    JLabel map = new JLabel(new ImageIcon(getClass().getResource("Pictures/map.gif")));
    JLabel mountain = new JLabel(new ImageIcon(getClass().getResource("Pictures/mountain.gif")));

    for(int i=0;i<panels.length;i++)
    {
        if(i>0)
        {
            x+=x;
            y+=y;
        }
        panels[i] = new JPanel(new GridLayout(2,2));
        panels[i].setPreferredSize(new Dimension(x,y));

        if(i==0)
            panels[i].add(new JPanel());

        else
            panels[i].add(panels[i-1]);

        panels[i].add(mountain);
        panels[i].add(map);
        panels[i].add(animal);
    }       
    add(panels[2]);

解决方法:

一种选择是创建一个类,该类将表示将图像划分为网格的面板.唯一的问题是左上象限,它通常包含嵌套面板,在某些时候你希望它只包含一个空白面板.所以也许这样的事情(除了各种优化):

 class GridPanel extends JPanel{

    JLabel mountain, map, animal;

    public GridPanel(JPanel panel){
        super();
        setLayout(new GridLayout(2, 2));
        animal = new JLabel(new ImageIcon(getClass().getResource("pictures/animal.gif")));
        map = new JLabel(new ImageIcon(getClass().getResource("pictures/map.gif")));
        mountain = new JLabel(new ImageIcon(getClass().getResource("pictures/mountain.gif")));
        add(panel);
        add(mountain);
        add(map);
        add(animal);
    }

}

请注意,它接受要在网格左上角显示的面板.然后使用指定的面板调用此coud.所以在你想要创建主面板的时候:

   JPanel grid = new GridPanel(new JPanel()); //initial
    for(int i = 1; i <= 5; i++){
        grid = new GridPanel(grid);
    }
    add(grid);

使用空白JPanel创建初始网格.并且每个后续网格都将包含前一个网格作为左上方面板.您必须调整图像等大小,甚至可能避免多次加载图像等.但这是另一个问题.此示例显示了5个嵌套面板.

为了清楚起见,您应该使用ImageIO加载图像一次并重复使用图像.例如,您可以在主类中创建这样的BufferedImage:

  BufferedImage mointainImg = ImageIO.read(new File("pictures/mountain.gif"));

当你想创建JLabel时,你可以这样做:

  mountain = new JLabel(new ImageIcon(mountainImg));

而且优点是你可以根据需要稍微操控图像.

标签:java,image,swing,jpanel,grid-layout
来源: https://codeday.me/bug/20190629/1323939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有