Java:如何在GridLayout中嵌套JPanel?
我想知道如何使用Java:如何在GridLayout中嵌套JPanel?,java,image,swing,jpanel,grid-layout,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("Pictur
GridLayout
嵌套JPanel
s。应该是这样的
到目前为止,我通过两种方式解决了这个问题
- 使用
s和JPanel
- 使用
sJLabel
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]);
intx=20,y=20;
JPanel[]面板=新JPanel[3];
JLabel-animal=newjlabel(新的图像图标(getClass().getResource(“Pictures/animal.gif”));
JLabel map=newjlabel(新的图像图标(getClass().getResource(“Pictures/map.gif”));
JLabel mountain=newjlabel(新的图像图标(getClass().getResource(“Pictures/mountain.gif”));
对于(int i=0;i0)
{
x+=x;
y+=y;
}
面板[i]=新JPanel(新网格布局(2,2));
面板[i].setPreferredSize(新尺寸(x,y));
如果(i==0)
面板[i]。添加(新的JPanel());
其他的
面板[i]。添加(面板[i-1]);
面板[i]。添加(山区);
面板[i]。添加(地图);
面板[i]。添加(动物);
}
添加(面板[2]);
您遇到的一个问题是图像没有缩放。要缩放图像,请使用Image.getScaledInstance()
。适当的缩放至少可以解决可见图像被切断的问题。它还可能导致显示其他图像,因为它们可能只是隐藏在可见图像后面,因为它们太大了。一个选项是创建一个类,该类将表示一个面板,该面板与图像一起划分为网格。唯一的问题是左上方的象限,它通常包含嵌套面板,在某个点上,您希望它只包含一个空白面板。所以可能是这样(除非进行各种优化):
请注意,它接受将显示在栅格左上角的面板。然后可以使用指定的面板调用此函数。因此,在要创建主面板的位置:
JPanel grid = new GridPanel(new JPanel()); //initial
for(int i = 1; i <= 5; i++){
grid = new GridPanel(grid);
}
add(grid);
当您想要创建JLabel时,可以执行以下操作:
mountain = new JLabel(new ImageIcon(mountainImg));
其优点是,如果您愿意,您可以稍微操纵图像。当前显示的是什么?我只添加了最后一个JPanel,因为我认为其他面板都添加到了它。。。
BufferedImage mointainImg = ImageIO.read(new File("pictures/mountain.gif"));
mountain = new JLabel(new ImageIcon(mountainImg));