KinderRiven 2015-01-29 05:18 采纳率: 0%
浏览 1422
已结题

关于JAVA制作桌面挂架的一些问题

    这个问题之前一直在网上找答案,还是找不到,在这里冒昧的请教一下,就是关于用     java显示一张异形图片,但是不显示承载这个图片的容器窗体,看上去就给人一种只显示了一张图片的感觉,之前想过用JFrame窗体显示,之后让JFrane透明,但是这样的话,上面的图片也透明了,之后看网上有人用了一个com.sun.awt.AWTUtilities的类去实现,不过这个方法貌似也不行,能问一下有什么办法去实现这个问题吗?
  • 写回答

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();
    }
    

    }

    评论

报告相同问题?