2017-04-22 9 views
0

ImageIcon을 포함하는 JLabel을 만들고 원하는 크기로 부드럽게 한 후 그리드 레이아웃이있는 JFrame에 삽입했습니다.JLabel ImageIcon이 제대로 스무딩되지 않음

그것은 주로 일을하지만,이 이미지에서 볼 수 있듯이 JLabel 주변의 빈 수평 영역은 프레임의 대부분을 hogged : Outcome

왜 나에게 다음과 같은 결과를 제공하지 JLabelImageIcon입니까?

 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) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. –

+1

* "좋은 질문이되기 위해 필요한 것입니다."* 상당히 주관적입니다. 나는 그렇다고 말하고 싶다. * ".. 아니면 조언 일 뿐이니?"나는 둘 다라고 말하고 싶다. OTOH는 없지만 ** '** MCVE'는 언급하지 않는 ** 두 가지 이유 때문에 질문해야하는 질문은 답변을 원하십니까? 코드 블록을 비교할 수없는 코드 스 니펫을 MCVE로 변환하여 테스트 해보고 싶지만, 이제는 결정을 기다리게 될 것입니다 (& MCVE). –

답변

3

BorderLayout처럼 다른 레이아웃을 사용해보십시오 :

Desired Outcome

내 렌더러입니다. GridLayout은 모든 셀을 동일한 크기로 만듭니다.

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

실제로 작동했습니다! : O 고마워! : D –

+0

'FlowLayout'도 작동 할 수 있습니다. 저는 MCVE를한데 모았습니다. 그래서 저는 그것을 좋은 방법으로 추가했습니다. – Radiodef

+0

나는 Flow를 사용하는 것을 생각했지만, 아이콘이 텍스트의 왼쪽에 있도록하기를 원했고, Flow는 아이콘 아래에 어떤 텍스트를 나타낼 것입니다. –