JLabel ImageIcon 没有正确平滑
JLabel ImageIcon not smoothing properly
我创建了一个包含 ImageIcon
的 JLabel
,并在将其平滑到所需大小后将其插入到具有网格布局的 JFrame
中。
它大部分都有效,但是 JLabel
周围的空白水平区域占据了大部分画面,如下图所示:
为什么 JLabel
ImageIcon
没有给我以下结果?
这是我的渲染器:
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);
尝试使用不同的布局,例如 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);
}
}
}
我创建了一个包含 ImageIcon
的 JLabel
,并在将其平滑到所需大小后将其插入到具有网格布局的 JFrame
中。
它大部分都有效,但是 JLabel
周围的空白水平区域占据了大部分画面,如下图所示:
为什么 JLabel
ImageIcon
没有给我以下结果?
这是我的渲染器:
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);
尝试使用不同的布局,例如 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);
}
}
}