2017-04-22 43 views
0

我創建了一個包含ImageIconJLabel,並在將其平滑到首選大小之後,將其插入到具有網格佈局的JFrame中。JLabel ImageIcon沒有正常平滑

它主要工作,但因爲看到了這個圖像中的JLabel圍繞坯料水平區域擠兌了大部分的框架:Outcome

爲什麼JLabelImageIcon不給我下面的結果?

Desired Outcome

這是我的渲染器:

 ImageIcon imageIcon = new ImageIcon(baseDir + dash + "ErrIco.png"); 
     Image image = imageIcon.getImage(); 
     Image newimg = image.getScaledInstance(35, 35, java.awt.Image.SCALE_SMOOTH); 
     imageIcon = new ImageIcon(newimg); 
+1

1)爲了更好地幫助更快,發佈[MCVE]或[短的,獨立的,正確的示例](HTTP:// www.sscce.org/)。 2)獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。 –

+1

*「這是要求它是一個很好的問題..」*這是相當主觀的。我會說是的。 *「或者只是建議?」*我會說這是兩個。 OTOH沒有一個,但**兩個**提到'沒有MCVE'的密切理由,所以你應該問自己的問題是,你想要多少答案?我幾乎想把這個不可編譯的代碼片段變成一個MCVE進一步測試,但現在我想我會等待你的決定(&MCVE)。 –

回答

3

嘗試使用不同的佈局,像BorderLayoutGridLayout將強制所有單元具有相同的大小。

frame.setLayout(new BorderLayout()); 
... 
frame.add(new JLabel(imageIcon), BorderLayout.WEST); 
frame.add(label,     BorderLayout.CENTER); 

編輯:

我看你已經接受了我的答案,但我在平均時間把這個在一起,只是爲了看看有縮放圖像的JLabel增加了一些額外的因素。 (。它沒有它工作正常)

image example

import java.awt.*; 
import javax.swing.*; 
import java.net.*; 
import javax.imageio.*; 

class ImageExample implements Runnable { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new ImageExample()); 
    } 

    @Override 
    public void run() { 
     JFrame frame = new JFrame(); 
     JPanel content = new JPanel(); 
     content.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 
     content.setBackground(Color.white); 
     frame.setContentPane(content); 
     // 
     frame.setLayout(new BorderLayout(20, 20)); 
     JLabel icon = new JLabel(new ImageIcon(img)); 
     JLabel text = new JLabel("<html>" + 
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "<br>" + 
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + "<br>" + 
      "cccccccccccccccccccccccccccccccccccccccccc" + "</html>"); 
     text.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 
     frame.add(icon, BorderLayout.WEST); 
     frame.add(text, BorderLayout.CENTER); 
     // 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    static final Image img; 
    static { 
     try { 
      URL url = new URL("http://i.stack.imgur.com/7bI1Y.jpg"); 
      img = ImageIO.read(url).getScaledInstance(48, 48, Image.SCALE_SMOOTH); 
     } catch (Exception x) { 
      throw new RuntimeException(x); 
     } 
    } 
} 
+0

這實際上工作! :哦,謝謝! :D –

+0

'FlowLayout'也可能工作。我把一個MCVE放在一起,所以我加了一個好的措施。 – Radiodef

+0

我想過使用Flow,但我希望圖標位於文本左側,Flow會使圖標下方顯示一些文本。 –