【发布时间】:2014-02-25 22:03:58
【问题描述】:
请耐心等待,我还是个初学者,请不要粗鲁。
所以这个问题的目标是让我学习如何将我已经透明的 JFrame 的背景设置为模糊。这就是我现在所拥有的。
所以你可以看到它是透明的,但不是模糊的。我在想也许Java有一些过程可以模糊JAR中的图像并将其用作背景而不改变原始图像。所以我看了又看,但没有找到任何帮助。
如上所示,JFrame 的背景是一个没有文本的标签,而是作为标签图标的“背景图像”。
JAR 的组织:
META-INF(folder) > MANIFEST.MF
SystemInfo(folder) > classes and background image
这是我目前的代码,但它不起作用。
setOpacity(); // sets opacity of the background
Color c = Color.WHITE; // default color
setColor(c);
//background = (new JLabel((Icon) new ImageIcon(a)));
BufferedImage mshi = null;
try{mshi = ImageIO.read(new File("SystemInfo/black.png"));}catch(Exception e){e.printStackTrace();}
BufferedImage databuf = new BufferedImage(mshi.getWidth(null),
mshi.getHeight(null),
BufferedImage.TYPE_INT_BGR);
Graphics g = databuf.getGraphics();
g.drawImage(mshi, 455, 255, null);
float[] blurKernel = {
1 / 9f, 1 / 9f, 1 / 9f,
1 / 9f, 1 / 9f, 1 / 9f,
1 / 9f, 1 / 9f, 1 / 9f
};
BufferedImageOp blur = new ConvolveOp(new Kernel(3, 3, blurKernel));
mshi = blur.filter(mshi, new BufferedImage(mshi.getWidth(),
mshi.getHeight(), mshi.getType()));
g.dispose();
//background = (new JLabel((Icon) new ImageIcon(mshi)));
background.setIcon((Icon)new JLabel(new ImageIcon(mshi)));
以上代码产生的错误:
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at SystemInfo.GuiMain.cinitComponents(GuiMain.java:150)
at SystemInfo.GuiMain.<init>(GuiMain.java:30)
at SystemInfo.GuiMain$8.run(GuiMain.java:256)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at SystemInfo.GuiMain.cinitComponents(GuiMain.java:152)
at SystemInfo.GuiMain.<init>(GuiMain.java:30)
at SystemInfo.GuiMain$8.run(GuiMain.java:256)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
如果需要,setOpacity();功能:
float fOpacity = (float)opacity/10;
String sOpacity = Float.toString(fOpacity)+"f";
this.setOpacity(Float.parseFloat(sOpacity));
我的主要目标是让 JFrame 产生这样的东西:
如您所见,边框稍微模糊了电脑背景,并且是透明的。
提前谢谢大家。
【问题讨论】:
-
@MirroredFate 这个问题似乎没有答案,所以我觉得不能将这个问题标记为重复。
-
@NickRippe 还有stackoverflow.com/questions/14840763/…
-
@MirroredFate 也很接近,但问题只是在焦点
JFrame的背景中模糊JFrame(而不是JFrame背后的背景)。提供的答案在这种情况下不起作用。