输出到屏幕时图像的定位不正确

时间:2017-06-17 15:42:21

标签: java swing graphics

让我问你一个问题。我有一个包含不同尺寸图片的文件夹,从中我随机阅读图片,减小尺寸并在jpanel上使用JLabel演绎 - 这很简单。事实上,一张图片的撤回可以显示在正确的坐标上,而另一张图片可以在仪表上反弹。为什么会发生这种情况?随机图示忽略SetBounds和其他容器的边界。

    private void initialize() throws IOException {
    frame = new JFrame();
    frame.setBounds(100, 100, 1150, 664);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    panel = new JPanel ();
    panel.setBounds(10, 10, 1150, 664);
    frame.getContentPane().add(panel);

    File f = new File ("C:/Users/user/Desktop/Ramms");
    String[] names = f.list();
    all_Images= new ImageIcon[names.length];
    for(int i=0; i<names.length; i++){
        all_Images[i]= new ImageIcon ("C:/Users/user/Desktop/Ramms/"+names[i]);
    }
    selected_Image = all_Images[random(0,all_Images.length)];
    w= selected_Image.getIconWidth()/scl;
    h= selected_Image.getIconHeight()/scl;
    Image img = selected_Image.getImage(); 
    bic = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
    Graphics g = bic.createGraphics(); 
    g.drawImage(img, 0, 0, w, h, null); 
    newIcon = new ImageIcon(bic); 
    panel.setLayout(null);

    JLabel label1 = new JLabel(newIcon);
    panel.add(label1).setBounds(0,100,w,h);         
}

1 个答案:

答案 0 :(得分:2)

  

缩小尺寸

看起来你没有缩小它的尺寸:

this.modalContent

bic = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics g = bic.createGraphics(); g.drawImage(img, 0, 0, w, h, null); newIcon = new ImageIcon(bic); 的大小是创建的Icon的大小。

它不知道或关心你在BufferedImage上绘制的内容。

一些解决方案:

  1. 创建BufferedImage时,您需要以缩放尺寸创建图片。

  2. 使用BufferedImage方法调整图片大小。