嘗試使用不同的佈局,像BorderLayout
。 GridLayout
將強制所有單元具有相同的大小。
frame.setLayout(new BorderLayout());
...
frame.add(new JLabel(imageIcon), BorderLayout.WEST);
frame.add(label, BorderLayout.CENTER);
編輯:
我看你已經接受了我的答案,但我在平均時間把這個在一起,只是爲了看看有縮放圖像的JLabel增加了一些額外的因素。 (。它沒有它工作正常)
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);
}
}
}
1)爲了更好地幫助更快,發佈[MCVE]或[短的,獨立的,正確的示例](HTTP:// www.sscce.org/)。 2)獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。 –
*「這是要求它是一個很好的問題..」*這是相當主觀的。我會說是的。 *「或者只是建議?」*我會說這是兩個。 OTOH沒有一個,但**兩個**提到'沒有MCVE'的密切理由,所以你應該問自己的問題是,你想要多少答案?我幾乎想把這個不可編譯的代碼片段變成一個MCVE進一步測試,但現在我想我會等待你的決定(&MCVE)。 –