gpt4 book ai didi

java - 重新绘制 Aero JFrame

转载 作者:行者123 更新时间:2023-11-30 04:57:35 26 4
gpt4 key购买 nike

第一次绘制时,绘制不正确。但是,当我最小化框架并恢复它时,它被正确绘制。

我该如何解决这个问题?我尝试过 repaint()。

这是代码

import javax.swing.JComponent;
import javax.swing.JFrame;

import com.sun.jna.Function;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinNT.HRESULT;

/**
* @author ex0b1t
*
*/
public class Aero {

public void enableAeroEffect(JFrame frame) {

NativeLibrary dwmapi = NativeLibrary.getInstance("dwmapi");
HWND aeroFrameHWND = new HWND(Native.getWindowPointer(frame));

MARGINS margins = new MARGINS();
margins.cxLeftWidth = -1;
margins.cxRightWidth = -1;
margins.cyBottomHeight = -1;
margins.cyTopHeight = -1;

Function extendFrameIntoClientArea = dwmapi
.getFunction("DwmExtendFrameIntoClientArea");
HRESULT result = (HRESULT) extendFrameIntoClientArea.invoke(
HRESULT.class, new Object[] { aeroFrameHWND, margins });
if (result.intValue() != 0)
System.err.println("Call to DwmExtendFrameIntoClientArea failed.");

frame.getRootPane().setDoubleBuffered(false);
frame.getRootPane().setOpaque(false);

if (frame.getRootPane().getContentPane() instanceof JComponent) {
JComponent content = (JComponent) frame.getRootPane().getContentPane();
content.setOpaque(false);
content.setDoubleBuffered(false);
}
}

/**
* @author ex0b1t
*
*/
public class MARGINS extends Structure implements Structure.ByReference {
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}
}



import javax.swing.JFrame;

/**
* @author ex0b1t
*
*/

public class MediaManager extends JFrame {

private static final long serialVersionUID = -8440221168382362270L;

public MediaManager() {
setTitle("Media Manager");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

/**
* @param args
*/
public static void main(String[]args){
MediaManager mediamanager = new MediaManager();
mediamanager.setVisible(true);
new Aero().enableAeroEffect(mediamanager);
mediamanager.repaint();
}
}

提前致谢。

最佳答案

当你说它没有正确绘制时,你是什么意思?我遇到了类似的问题,当我的框架第一次被绘制时,contentPane 是全黑的。当我最小化框架然后最大化它时,它被正确地绘制了(但并非总是如此 - 有时我必须这样做 2 或 3 次。)事实证明这是我的显卡驱动程序。我重新安装了它们,效果很好! (我有一个 Randeon)

也试试

           SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
mediamanager.setVisible(true);
new Aero().enableAeroEffect(mediamanager);
mediamanager.repaint();
}
}

线程和 Swing

http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

SwingUtilities.invokeLater

关于java - 重新绘制 Aero JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com