【问题标题】:Creating border around ImageIcon on a JLabel, not around the Jlabel在 JLabel 上的 ImageIcon 周围创建边框,而不是在 Jlabel 周围
【发布时间】:2010-11-14 16:24:46
【问题描述】:

我在为 JLabel 中的图标创建边框时遇到问题。我有 JPanel,我在其中将其设置为 GridLayout。我在 JPanel 上添加了 Jlabel。 JLabel 的大小取决于图标的大小。但是,当我尝试在图标上设置边框时,它会根据网格的大小而不是网格内图标的大小创建边框。

如何在图像周围而不是网格大小上创建边框?

为什么边框跟随网格的大小而不是 imageIcon 的大小?

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

【问题讨论】:

标签: java swing border jlabel


【解决方案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);

【讨论】:

  • 我在您的原始代码中添加了 2 行代码以使其正常工作,您使用了 6 倍 :)
  • 谢谢 tulskiy :) ...我发现这些代码符合我的程序的要求,如果我使用 Flowlayout,我需要大量更改我的代码(总体而言),所以我更喜欢这个而不是 Flowlayout :)
【解决方案2】:

使用 FlowLayout 将标签添加到面板,并将面板添加到 GridLayout 面板。

【讨论】:

  • 谢谢,反正我不用这么多面板吗?
  • 您在 11 月 3 日首次发布此问题时给出了完全相同的答案:stackoverflow.com/questions/4083389/…,您只是通过转发相同的问题浪费了 tulskiy 时间。还有其他方法,但我不想浪费我的时间,因为你在 2 周前忽略了我最初的建议。
  • @Jessy:您可以自定义 JLabel 绘制方法,但会更难。只需编写一些简单的帮助方法,将 JLabel 包装在面板中。
  • -1,用于建议自定义 JLabel 绘制方法。有更简单的方法。
  • @camickr:有趣,这是你第二次对你之前重复回答的问题的答案投反对票:) 我并不是建议他自定义 JLabel,我是在向他展示寻找替代方法可能是浪费时间。
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多