painsComponent中的图像仅显示完整图像的小左上角

时间:2016-02-24 08:25:31

标签: java image swing

我有一个程序应该加载2个面板彼此相邻。在一个我用一组面板显示10x10图像的网格:

private JPanel imagePanels[][] = new JPanel[10][10];

然后我加载一个带有如下图像的自定义面板:

imagePanels[i][j] = new ImagePanel("http://i.stack.imgur.com/W3RMa.jpg",Color.WHITE);

这是我试图加载的图像(32x32像素):

enter image description here

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像素):

enter image description here

该程序看起来像这样:

enter image description here

正如你所看到的那样,右侧可以正常显示整个图像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以使面板更大。

编辑:我在一个file中制作了一个包含所有重要内容的版本但我无法测试它,因为我在代理上并且它不会在这里加载图像。 (我想我的网址是正确的。)

LeftPlayerPanel的网址:http://i.stack.imgur.com/sjfvC.jpg

LoadSquare方法的网址:http://i.stack.imgur.com/W3RMa.jpg

0 个答案:

没有答案