0
A
回答
2
我一直在關閉這個開關一段時間,但從來沒有真正得到任何滿意的結果。爲什麼?因爲爲了得到這個工作,你需要使窗口透明(實際上半透明),但使用本機的外觀和感覺的裝飾時,該窗口必須以未修飾的工作......
注:這使得利用TeamDev JNI Library and associated WinPack Library的 - 因爲當我開始使用這種類型的東西,JNA仍然在它的嬰兒期
import com.jniwrapper.Function;
import com.jniwrapper.Library;
import com.jniwrapper.Parameter;
import com.jniwrapper.Pointer;
import com.jniwrapper.UInt32;
import com.jniwrapper.win32.ui.Wnd;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
public class TestDWM {
public static void main(String[] args) {
new TestDWM();
}
public TestDWM() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
final JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.setBackground(new Color(0, 0, 0, 0));
TranslucentPane panel = new TranslucentPane();
frame.setContentPane(panel);
panel.setBorder(new EmptyBorder(40, 40, 40, 40));
frame.setLayout(new GridBagLayout());
JLabel label = new JLabel("I'm a banana");
label.setFont(label.getFont().deriveFont(Font.BOLD, 48f));
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setAlwaysOnTop(true);
frame.setVisible(true);
setBlurBehind(frame);
}
});
}
public class TranslucentPane extends JPanel {
public TranslucentPane() {
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Color color = getBackground();
color = new Color(color.getRed(), color.getGreen(), color.getBlue(), 32);
g.setColor(color);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
public static void setBlurBehind(Window window) {
Wnd wnd = new Wnd(window);
Library libDWMAPI = new Library("Dwmapi");
Function fEnableBlurBehindWindow = libDWMAPI.getFunction("DwmEnableBlurBehindWindow");
DWMBlurBehind behind = new DWMBlurBehind();
System.out.println("wnd = " + wnd);
UInt32 dwResult = new UInt32(0);
long hResult = fEnableBlurBehindWindow.invoke(
dwResult,
new Parameter[]{
wnd,
new Pointer(behind)
});
System.out.println("hResult = " + hResult);
System.out.println("dwResult = " + dwResult.getValue());
}
}
而且DWMBlurBehind
類
import com.jniwrapper.Int;
import com.jniwrapper.Parameter;
import com.jniwrapper.Pointer;
import com.jniwrapper.Structure;
import com.jniwrapper.UInt32;
import windows.WinDef;
public class DWMBlurBehind extends Structure {
public static final int DWM_BB_ENABLED = 0x1;
public static final int DWM_BB_BLURREGION = 0x2;
public static final int DWM_BB_TRANSITIONONMAXIMIZED = 0x4;
private UInt32 dwFlags;
private Int enabled;
private Pointer.Void region;
private Int transitionOnMazimized;
public DWMBlurBehind() {
dwFlags = new UInt32(DWM_BB_ENABLED);
enabled = new Int(WinDef.TRUE);
transitionOnMazimized = new Int(WinDef.TRUE);
region = new Pointer.Void();
init(new Parameter[]
{
dwFlags,
enabled,
region,
transitionOnMazimized
});
}
public long getFlags() {
return dwFlags.getValue();
}
}
,說了這麼多,如果你沒有對UI使用本機外觀關心和感覺,你可以創建一個裝飾框(它使用外觀和感覺的裝飾)作爲demonstrated here
相關問題
- 1. 帶有模糊透明背景的JFrame
- 2. 透明模糊的背景
- 3. 透明模糊背景
- 4. 透明JFrame背景
- 5. 在jframe中模糊背景創建透明矩形
- 6. 模糊和透明的按鈕背景
- 7. 類似iOS的半透明模態,模糊背後的背景
- 8. 如何讓JFrame透明?
- 9. 透明背景JFrame Linux上的動畫
- 10. 如何讓TreeView背景透明?
- 11. 如何讓鏈接背景透明?
- 12. 如何讓背景變得透明?
- 13. 如何讓UIPageViewController背景半透明?
- 14. Java:如何讓容器的Jscrollpane背景不透明? (即透明)
- 15. 模糊半透明窗體的背景(如Aero玻璃)
- 16. 模擬透明背景
- 17. 如何減少JFrame背景顏色的不透明度
- 18. 如何使背景透明?
- 19. 如何cvCopy背景透明?
- 20. 活動與透明的背景和模糊過濾
- 21. JDialog具有透明背景,模糊了底下的東西
- 22. 創建一個半透明的模糊背景WPF
- 23. 創建模糊的透明背景效果
- 24. 如何使用Twitter Bootstrap使模糊背景模糊背景?
- 25. 讓班級的背景顏色透明?
- 26. 無法讓我的DialogFragment背景透明
- 27. 透明背景
- 28. java:如何將透明漸變背景添加到JFrame
- 29. 如何使JFrame背景和JPanel透明,僅顯示圖像
- 30. 背景透明度和模糊處理另一幅圖像
可能重複[在jframe中模糊背景中創建透明矩形](http://stackoverflow.com/questions/23215415/create-an-transparent-rectangle-over-blurred-background-in-jframe) – gtgaxiola 2015-03-02 18:51:58
@gtgaxiola我看了一下在我發佈我的問題之前在那個職位。如果您仔細閱讀我的問題,我想添加模糊效果而不在背景中添加任何圖像。但是您提到的帖子是爲了修復該特定組件並使背景圖像模糊。 – Alex 2015-03-02 19:12:05
一般來說,沒有。你「可能」能夠使用JNI/JNA來完成它,但是隨後你會遇到一整套新的問題,因爲核心API被設計來處理它... – MadProgrammer 2015-03-02 20:35:11