Создание границы вокруг ImageIcon на JLabel, а не вокруг Jlabel - PullRequest
1 голос
/ 14 ноября 2010

alt text

У меня проблема с созданием границы для иконки в JLabel.У меня есть JPanel, в котором я установил его в GridLayout.Я добавил Jlabel на JPanel.Размер JLabel соответствовал размеру иконки.Однако когда я попытался установить границу на значке, он создал границу в соответствии с размером сетки, а не размером значка внутри сетки.

Как я могу создать рамку вокруг изображения не по размеру сетки?

Почему граница соответствует размеру сетки, а не размеру изображения изображения?1009 *

JPanel panel= new JPanel(new GridLayout(ROWS,COLS,2,2)); 
panel.setsize(600,600);

....
JLabel = new JLabel(icon, JLabel.LEFT);
label.setVerticalAlignment(SwingConstants.TOP);
...
label.setborder(BorderFactory.createLineBorder(Color.RED,5));
panel.add(label);

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Я решил проблему.Благодаря этому сайту http://forums.oracle.com/forums/thread.jspa?messageID=5785467&#5785467

Image image = icon.getImage().getScaledInstance(widthX,heightY, image.SCALE_SMOOTH);            
icon.setImage(image);   

int borderWidth = 1;
int spaceAroundIcon = 0;
Color borderColor = Color.BLUE;

BufferedImage bi = new BufferedImage(icon.getIconWidth() + (2 * borderWidth + 2 * spaceAroundIcon),icon.getIconHeight() + (2 * borderWidth + 2 * spaceAroundIcon), BufferedImage.TYPE_INT_ARGB);

Graphics2D g = bi.createGraphics();
g.setColor(borderColor);
g.drawImage(icon.getImage(), borderWidth + spaceAroundIcon, borderWidth + spaceAroundIcon, null);

BasicStroke stroke = new BasicStroke(5); //5 pixels wide (thickness of the border)
g.setStroke(stroke);

g.drawRect(0, 0, bi.getWidth() - 1, bi.getHeight() - 1);
g.dispose();

label = new JLabel(new ImageIcon(bi), JLabel.LEFT);
label.setVerticalAlignment(SwingConstants.TOP);      

panel.add(label);
0 голосов
/ 14 ноября 2010

Добавьте ярлык на панель с помощью FlowLayout и добавьте панель на панель GridLayout.

...