2010-11-14 2 views
1

alt textСоздание границы вокруг ImageIcon на JLabel, а не вокруг JLabel

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

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

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

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); 
+0

Ответ уже дал, когда этот вопрос был первоначально размещен на ноябрь 3. http://stackoverflow.com/questions/4083389/how-to-create-border-around-an-image- and-not-on-around-the-jlabel – camickr

ответ

1

Я решил проблему. Благодаря этому сайт http://forums.oracle.com/forums/thread.jspa?messageID=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

Я добавил 2 строки кода в исходный код, чтобы он работал, вы использовали 6 раз больше :) –

+0

Спасибо tulskiy :) ... Я нашел, что эти коды соответствуют требованиям моей программы, если я использовал Flowlayout I мне нужно изменить свой код много (в целом), поэтому я предпочел это, чем Flowlayout :) – Jessy

-2

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

+0

Спасибо, есть ли в любом случае, что мне не нужно использовать столько панелей? – Jessy

+0

Вы получили точный ответ 3 ноября, когда вы впервые разместили этот вопрос: http://stackoverflow.com/questions/4083389/how-to-create-border-around-an-image-and-not-on- вокруг-the-jlabel, вы просто потратили впустую тульское время, отправив тот же вопрос. Есть и другие подходы, но я не собираюсь тратить свое время, так как вы проигнорировали мое первоначальное предложение 2 недели назад. – camickr

+0

@Jessy: вы можете настроить метод краски JLabel, но это будет сложнее. Просто напишите простой метод помощника, который обертывает JLabel в панели. –

Смежные вопросы