2013-11-10 2 views
0

Мой проект - это открыть изображение и сохранить его снова, я использую ImageIcon, JLabel и JPanel для его отображения (я использовал ImageIcon и JPanel, но это не сработало, ImageIcon не удалось добавить к JPanel). когда я его открываю, он всегда отображает изображение, но не полный размер для JFrame. этот код я пишу в классе OpenImage расширяет JFrameКак установить размер изображения в ImageIcon и размер JLabel

public class Draw_JPanel extends JFrame{ 
     Load_image panel_im = new Load_image(); 
public void OpenImage() 
{ 
    JFileChooser fc = new JFileChooser(); 
    int result = fc.showOpenDialog(null); 
    if(result == JFileChooser.APPROVE_OPTION) 
    { 
     File file = fc.getSelectedFile(); 
     String name = file.getName(); 
     try { 
      image = ImageIO.read(file); 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
     imageic = new ImageIcon(image); 
     height1 = imageic.getIconHeight(); 
     width1 = imageic.getIconWidth(); 
     picLabel = new JLabel(new ImageIcon(image)); 
     panel_im.add(picLabel,BorderLayout.CENTER); 
    } 
    this.pack(); 

} 

и код Load_image класса

public class Load_image extends JPanel{ 
public Load_image() 
{ 
    this.setBackground(Color.RED); 
} 
} 

Извините, но я не могу загрузить изображение

+0

вы видите полный размер вашего изображения? или попробуйте изменить размер изображения, чтобы заполнить все области 'JFrame'? – alex2410

+0

Я пытаюсь изменить размер моего изображения на JFrame –

+0

Я думаю, что ваше изображение имеет фиксированный размер, из-за которого его ярлык не может изменить его размер, если вы хотите изменить размер изображения, попробуйте прочитать [it] (http://stackoverflow.com/questions/3967731/java-scale-image-best-practice) и [это] (http://www.mkyong.com/java/how-to-resize-an-image-in-java/) или найти что-нибудь else – alex2410

ответ

0

Я написал простой пример для вас. Он рисует изображение и изменяет его размеры с помощью imgscalr library. Также вы можете сохранить изображение. Попытайтесь, я думаю, это вам поможет.

public class Example extends JPanel{ 

    private static BufferedImage scaledImg; 

    public static void main(String[] args) { 
     Example e = new Example(); 
     JFrame f = new JFrame(); 
     f.setLayout(new GridBagLayout()); 

     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.BOTH; 
     c.weightx = 1; 
     c.weighty = 1; 
     f.add(e,c); 

     c.fill = GridBagConstraints.NONE; 
     c.weightx = 0; 
     c.weighty = 0; 
     c.gridx = 1; 
     JButton b = new JButton("save"); 
     b.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       File outputfile = new File("c:\\image.png"); 
       try { 
        ImageIO.write(scaledImg, "png", outputfile); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     f.add(b,c); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.pack(); 
     f.setVisible(true); 
    } 

    @Override 
    protected void paintComponent(Graphics arg0) { 
     super.paintComponent(arg0); 
     Graphics2D g = (Graphics2D) arg0; 
     BufferedImage img = null; 
     try { 
      img = ImageIO.read(Example.class.getResource("/res/3_disc.png")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     scaledImg = Scalr.resize(img,getSize().height,getSize().width,new BufferedImageOp[]{}); 
     g.drawImage (scaledImg, null, 0, 0); 
    } 

} 

здесь "/res/3_disc.png" это изображение в моем проекте

"c:\\image.png" выход для изображения

+0

Я пытаюсь с вашим кодом, но что такое объект Scalr? Я не могу найти нигде, где вы его объявляете –

+0

'Scalr' это класс из библиотеки, я указываю текст. Загрузите его и добавьте в classpath – alex2410

0

Я установил свой код, я добавляю SetBounds() метод и setLayout() метод, вот мой код после того, как исправлено:

setLayout(null); 
     imageic = new ImageIcon(image); 
     height1 = imageic.getIconHeight(); 
     width1 = imageic.getIconWidth(); 
     picLabel = new JLabel(new ImageIcon(image)); 
     picLabel.setSize(width1, height1); 
     picLabel.setBounds(0, 0, width1, height1); 
     panel_im.setSize(width1, height1); 
     panel_im.setBounds(-5, -5, width1, height1); 
     panel_im.add(picLabel); 
     this.pack(); 

ТКС для всех

Смежные вопросы