2017-04-22 7 views
0

ImageIconを含むJLabelを作成し、それを好ましいサイズに平滑化した後にグリッドレイアウトのJFrameに挿入しました。JLabel ImageIconが適切に平滑化されていない

それはほとんど働いていたが、この画像に見られるようJLabel周りの空白水平領域は、フレームのほとんどをhogged: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)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 –

+1

* "それは良い質問であるために必要なものです。" *それはかなり主観的です。私ははいと言うだろう。 * "それとも、アドバイスなの?" OTOHは1つではありませんが、** 2つの理由がありますが、「MCVEはありません」と言われていますので、あなた自身が尋ねるべき質問はどれくらいですか?そのコンパイル不可能なコードスニペットをさらにテストするMCVEに変えたいと思っていましたが、今はあなたの決定(&MCVE)を待つと思います。 –

答えて

3

BorderLayoutのような異なるレイアウトを、使用してみてください。 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

それは実際に働いた! :ありがとう! :D –

+0

'FlowLayout'もうまくいくかもしれません。私はMCVEをまとめていたので、それを追加して良かった。 – Radiodef

+0

私はFlowを使うことを考えましたが、アイコンをテキストの左に置いて、Flowがアイコンの下にテキストを表示させるようにしました。 –

関連する問題