有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个程序,应该加载两个相邻的面板。在其中一个屏幕上,我使用一组面板显示了一个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

图像面板:

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();
    }
}

另外,我还在研究程序的精确尺寸和每个面板的尺寸。我知道它现在的显示方式不合适,但我也尝试将SplitPane滑动到右侧以使面板更大

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

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

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


共 (0) 个答案