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像素):
图像面板:
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();
}
}
另外,我还在研究程序的精确尺寸和每个面板的尺寸。我知道它现在的显示方式不合适,但我也尝试将SplitPane
滑动到右侧以使面板更大
编辑:我制作了一个版本,在一个file中包含了所有重要的内容,但我无法测试它,因为我在代理上,它不会在这里加载图像。(我想我的url是对的。)
LeftPlayerPanel的URL:http://i.stack.imgur.com/sjfvC.jpg
LoadSquare方法的URL:http://i.stack.imgur.com/W3RMa.jpg
共 (0) 个答案