我有一个程序应该加载2个面板彼此相邻。在一个我用一组面板显示10x10图像的网格:
private JPanel imagePanels[][] = new JPanel[10][10];
然后我加载一个带有如下图像的自定义面板:
imagePanels[i][j] = new ImagePanel("http://i.stack.imgur.com/W3RMa.jpg",Color.WHITE);
这是我试图加载的图像(32x32像素):
ImagePanel:
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel(String path,Color background){ //TODO!!:set background color
try{
URL url = new URL(path);
image = = ImageIO.read(url);
}catch(IOException ex){
System.out.println("Image Not Found");
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponents(g);
g.drawImage(image,0,0,null);
}
}
这样可行,面板显示我传递的32x32像素图像。现在我想在另一个面板中显示另一个图像。我决定使用ImagePanel
类作为GoTo类,在整个程序中的面板上加载图像。所以我为第二个小组制作了另一个课程:
public class LeftPlayerPanel extends JPanel{
private JPanel PlayerPicturePanel = new ImagePanel("http://i.stack.imgur.com/sjfvC.jpg",Color.GRAY);
public LeftPlayerPanel(Player thisPlayer){
this.add(PlayerPicturePanel);
//TODO!!:Display Player Stats
}
}
这是我此次尝试加载的图像(128x128像素):
该程序看起来像这样:
正如你所看到的那样,右侧可以正常显示整个图像100次。(不要担心红点。这就是它应该做的事情)但是在程序的左边,图像只显示部分(左上角的一点点。)
我的布局有问题吗?我是否必须为每张图片制作另一个课程?或者对于每个图像大小?这是因为我使用SplitPane
?
以下是显示内容的类:
public class test {
private static Positition p;
public static void main(String[] v){
Field f = new Field(2, 100);
p = f.getRandomFieldPosition();
printPosition(p);
JPanel panel = new FieldPanel(p);
JPanel player = new LeftPlayerPanel(null);// add player later
JFrame f1 = new TestFrame("TESTFRAME");
panel.setPreferredSize(new Dimension(326,309));
player.setPreferredSize(new Dimension(135,309));
JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,player,panel);
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.add(splitpane,BorderLayout.CENTER);
f1.setContentPane(content);
f1.setPreferredSize(new Dimension(326+135,309));
f1.pack();
f1.show();
}
}
PS。我还在研究程序的大小和每个面板的大小。我知道它现在显示的方式不合适但我也尝试向右滑动SplitPane
以使面板更大。
LeftPlayerPanel的网址:http://i.stack.imgur.com/sjfvC.jpg
LoadSquare方法的网址:http://i.stack.imgur.com/W3RMa.jpg