急求用swing实现不规则窗体

vinoya 2008-07-10 09:56:12
请问如何用swing实现不规则窗体,比如画一个房子,或者一艘船之类的。
查了一下JDK6.0新增了不透明和不规则窗口的功能,但是还是没有弄明白,请教各位大侠帮忙!
小弟感激不尽,谢谢!
...全文
250 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vinoya 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 craky 的回复:]
第三方包JNA可以,主页地址https://jna.dev.java.net/

用法

Java codeRoundRectangle2D.Float mask=newRoundRectangle2D.Float(0,0, jframe.getWidth(), jframe.getHeight(),10,10);
WindowUtils.setWindowMask(jframe, mask);
[/Quote]
用这种方法很方便的实现了,谢谢大家!
结贴去。。。
realNameeee 2008-07-12
  • 打赏
  • 举报
回复
学习
craky 2008-07-11
  • 打赏
  • 举报
回复
JDK6没有,j2se6 update N有
还未发布的JDK7有
要用的话去搜一下,有现成的第三方包的
小宏 2008-07-11
  • 打赏
  • 举报
回复
关注中...
craky 2008-07-11
  • 打赏
  • 举报
回复
第三方包JNA可以,主页地址https://jna.dev.java.net/

用法


RoundRectangle2D.Float mask = new RoundRectangle2D.Float(0, 0, jframe.getWidth(), jframe.getHeight(), 10, 10);
WindowUtils.setWindowMask(jframe, mask);
talent_marquis 2008-07-11
  • 打赏
  • 举报
回复
SWT倒是可以实现楼主的要求。。。。可惜不是Swing了 - -


/***************************************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
**************************************************************************************************/
package org.eclipse.swt.snippets;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;

/**
* Region snippet: Create non-rectangular shell from an image with transparency
*
* For a list of all SWT example snippets see http://www.eclipse.org/swt/snippets/
*
* @since 3.2
*/
public class Snippet219
{
public static void main( String[] args )
{

final Display display = new Display();
final Image image = display.getSystemImage( SWT.ICON_INFORMATION );
final Shell shell = new Shell( display, SWT.NO_TRIM );
Region region = new Region();
final ImageData imageData = image.getImageData();
if( imageData.alphaData != null )
{
Rectangle pixel = new Rectangle( 0, 0, 1, 1 );
for( int y = 0; y < imageData.height; y++ )
{
for( int x = 0; x < imageData.width; x++ )
{
if( imageData.getAlpha( x, y ) == 255 )
{
pixel.x = imageData.x + x;
pixel.y = imageData.y + y;
region.add( pixel );
}
}
}
} else
{
ImageData mask = imageData.getTransparencyMask();
Rectangle pixel = new Rectangle( 0, 0, 1, 1 );
for( int y = 0; y < mask.height; y++ )
{
for( int x = 0; x < mask.width; x++ )
{
if( mask.getPixel( x, y ) != 0 )
{
pixel.x = imageData.x + x;
pixel.y = imageData.y + y;
region.add( pixel );
}
}
}
}
shell.setRegion( region );

Listener l = new Listener()
{
int startX, startY;
public void handleEvent( Event e )
{

if( e.type == SWT.KeyDown && e.character == SWT.ESC )
{
shell.dispose();
}
if( e.type == SWT.MouseDown && e.button == 1 )
{
startX = e.x;
startY = e.y;
}
if( e.type == SWT.MouseMove && ( e.stateMask & SWT.BUTTON1 ) != 0 )
{
Point p = shell.toDisplay( e.x, e.y );
p.x -= startX;
p.y -= startY;
shell.setLocation( p );
}
if( e.type == SWT.Paint )
{
e.gc.drawImage( image, imageData.x, imageData.y );
}
}
};
shell.addListener( SWT.KeyDown, l );
shell.addListener( SWT.MouseDown, l );
shell.addListener( SWT.MouseMove, l );
shell.addListener( SWT.Paint, l );

shell.setSize( imageData.x + imageData.width, imageData.y + imageData.height );
shell.open();
while( !shell.isDisposed() )
{
if( !display.readAndDispatch() )
display.sleep();
}
region.dispose();
image.dispose();
display.dispose();
}
}

craky 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vinoya 的回复:]
引用 3 楼 craky 的回复:
JDK6没有,j2se6 update N有
还未发布的JDK7有
要用的话去搜一下,有现成的第三方包的

比如第三方包有些什么啊?
[/Quote]

比如百度、google、sohu之类的,哈哈~~~~~~~~~~~~~~~~
nj_dobetter 2008-07-11
  • 打赏
  • 举报
回复
JNI可以实现。我见过这种方法的效果。

用JNI和Windows API中的SetWindowRgn函数作的
vinoya 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 craky 的回复:]
JDK6没有,j2se6 update N有
还未发布的JDK7有
要用的话去搜一下,有现成的第三方包的
[/Quote]
比如第三方包有些什么啊?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧