【发布时间】:2015-04-08 03:36:32
【问题描述】:
我有一个未装饰的椭圆形 JFrame,我想添加一个边框。
我希望我不必实现 rootPane.paintComponent 方法,并且我可以通过添加边框来做到这一点。
这在 Java 7 或 8 中是否可行?
【问题讨论】:
-
“希望我不必实现paintComponent方法”
JFrame没有这样的方法,所以看起来不太可能..
我有一个未装饰的椭圆形 JFrame,我想添加一个边框。
我希望我不必实现 rootPane.paintComponent 方法,并且我可以通过添加边框来做到这一点。
这在 Java 7 或 8 中是否可行?
【问题讨论】:
JFrame没有这样的方法,所以看起来不太可能..
在您的paintComponent() 实现中,使用setClip() 和Ellipse2D 大小以匹配图像的width 和height。
private Ellipse2D.Double border = new Ellipse2D.Double();
…
public void paintComponent(Graphics g) {
super.paintComponent()
Graphics2D g2d = (Graphics2D) g;
…
int width = getWidth();
int height = getHeight();
g2d.setPaint(…);
g2d.fillRect(0, 0, width, height);
border.setFrame(0, 0, width, height);
g2d.setClip(border);
g2d.drawImage(image, 0, 0, width, height, this);
}
同样覆盖getPreferredSize(),如图here。
【讨论】:
Border,但我认为没有优势;另请参阅Q&A。