这个问题之前一直在网上找答案,还是找不到,在这里冒昧的请教一下,就是关于用 java显示一张异形图片,但是不显示承载这个图片的容器窗体,看上去就给人一种只显示了一张图片的感觉,之前想过用JFrame窗体显示,之后让JFrane透明,但是这样的话,上面的图片也透明了,之后看网上有人用了一个com.sun.awt.AWTUtilities的类去实现,不过这个方法貌似也不行,能问一下有什么办法去实现这个问题吗?
关于JAVA制作桌面挂架的一些问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
_1_1_7_ 2016-06-06 06:50关注用swt
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.sf.feeling.swt.win32.extension.graphics.ImageRegion;
import org.sf.feeling.swt.win32.extension.shell.listener.WindowMoveListener;
import org.sf.feeling.swt.win32.extension.widgets.CMenu;
import org.sf.feeling.swt.win32.extension.widgets.CMenuItem;
import org.sf.feeling.swt.win32.extension.widgets.PopupMenu;
import org.sf.feeling.swt.win32.extension.widgets.listener.MenuAdapter;
import org.sf.feeling.swt.win32.extension.widgets.theme.ThemeRender;
import org.sf.feeling.swt.win32.extension.widgets.theme.VS2005ThemeRender;
import org.sf.feeling.swt.win32.internal.extension.util.ImageCache;public class CustomShapedWindow {
/**
* @param args
*/
public static void main(String[] args) {
new CustomShapedWindow();
}public CustomShapedWindow() { super(); Display display = new Display(); Shell mainShell = new Shell(display); final Shell shell = new Shell(mainShell, SWT.NO_TRIM); Image image = ImageCache.getImage("/cup.bmp"); shell.setSize(image.getImageData().width, image.getImageData().height); shell.setBackgroundImage(image); shell.setRegion(ImageRegion.calculateControlGraphicsPath(image, image .getImageData().getPixel(0, 0))); WindowMoveListener l = new WindowMoveListener(shell, false); shell.addListener(SWT.MouseDown, l); shell.addListener(SWT.MouseUp, l); shell.addListener(SWT.MouseMove, l); shell.setLayout(new GridLayout()); CMenu menu = new CMenu(); CMenuItem item = new CMenuItem("&Hide", SWT.NONE); menu.addItem(item); final ThemeRender theme = new VS2005ThemeRender(); final PopupMenu popupMenu = new PopupMenu(shell, theme); popupMenu.setMenu(menu); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { shell.setVisible(false); } }); menu.addMenuListener(new MenuAdapter() { public void menuShown(Event e) { popupMenu.setTheme(theme); popupMenu.refresh(); } }); Monitor primary = Display.getDefault().getPrimaryMonitor(); Rectangle bounds = primary.getBounds(); Rectangle rect = shell.getBounds(); int x = bounds.x + (bounds.width - rect.width) / 2; int y = bounds.y + (bounds.height - rect.height) / 2; shell.setLocation(x, y); shell.setVisible(true); while (!mainShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }}
解决 无用评论 打赏 举报