求大神指导Java用JPanel.setOpaque(setvisible falsee);将面版透明,在上面添加一个文本框怎么让他透明?

用netbeans如何给JFrame添加背景图片?
[问题点数:20分]
用netbeans如何给JFrame添加背景图片?
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Java如何添加背景图片_百度知道
Java如何添加背景图片
public class Login extends Frame implements ActionListener
Label lbuser,
Label lbinstrution=new Label(&抱歉,该用户名不存在!&);
Label lbinstrution1=new Label(&抱歉,该用户口令不正确!&);
TextField tfuser,
Button btn1,btn2;
...
我有更好的答案
class ImageFrame extends JFrame{ public ImageFrame() {
setTitle(&Color&);
setSize(DEFAULT_WITH,DEFAULT_HEIGH);
ImagePanel fp=new ImagePanel();
add(fp); } public static final int DEFAULT_WITH=300; public static final int DEFAULT_HEIGH=300;}class ImagePanel extends JPanel{ public ImagePanel() {
image = ImageIO.read(new File(&Pic\\cat.jpg&));
}catch(IOException e)
{e.printStackTrace();} } public void paintComponent(Graphics g) {
super.paintComponent(g);
if(image==null)
int imageWidth=image.getWidth(this);
int imageHeight=image.getHeight(this);
g.drawImage(image, 0, 0,null);
for(int i=0;i*imageWidth&=getWidth();i++)
for(int j=0;j*imageHeight&=getHeight();j++)
g.copyArea(0, 0,imageWidth, imageHeight, i*imageWidth,j*imageHeight); } private I}然后在main函数中添加ImageFrame frame=new ImageFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);就OK了,我写的有点复杂了,但是功能全,如果你想要简单的,可以复制里面的一点主要代码就行了
采纳率:63%
解道澄江净如练,令人长忆谢玄晖。尝高谢太傅,携妓东山门。楚舞醉碧云,吴歌断清猿。
为您推荐:
其他类似问题
背景图片的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。下次自动登录
现在的位置:
& 综合 & 正文
Java模仿Kugou,实现歌词秀
Kugou的歌词秀如图:
我模拟的效果如图所示.
鼠标选中后如图:
歌词秀有以下细节注意点:
1、没有“窗口”,直接在桌面上绘制歌词
2、歌词文字是彩色的,且颜色渐变。已唱歌词与未唱歌词的渐变色不同。歌词、、文字有黑色边框,以便于周围背景清晰区分
3、歌词可拖动,当鼠标移上去时会变成可拖动的形状
用Java实现,有以下技术点:
1、透明窗口
这个需要借助JNA来实现,通过
System.setProperty("sun.java2d.noddraw", "true");
WindowUtils.setWindowTransparent(this,true);
使得窗口透明
2、渐变的彩色文字,使用GradientPaint填充一个BufferedImage,BufferedImage的渐变色即为歌词的渐变色。然后取得歌词的形状,
用此BufferedImage填充即可。比较麻烦的是文字的黑色边框,这个最后想了一个办法就是分别向上下左右偏移一个像素绘制
黑色的歌词,然后在其上绘制正常的彩色渐变歌词,这样最终的叠加相关就正好是我们需要的效果。
import java.awt.AlphaC
import java.awt.C
import java.awt.C
import java.awt.F
import java.awt.FontM
import java.awt.GradientP
import java.awt.G
import java.awt.Graphics2D;
import java.awt.RenderingH
import java.awt.TextureP
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.awt.event.MouseL
import java.awt.event.MouseMotionL
import java.awt.font.FontRenderC
import java.awt.font.TextL
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedI
import java.io.F
import java.io.FileR
import java.io.InputStreamR
import java.io.LineNumberR
import java.util.LinkedL
import java.util.L
import javax.swing.*;
import com.sun.jna.N
import com.sun.jna.P
import com.sun.jna.examples.WindowU
import com.sun.jna.examples.win32.User32;
import com.sun.jna.examples.win32.W32API;
import com.sun.jna.ptr.IntByR
* 卡拉OK歌词效果,模仿Kugou桌面上的歌词秀
* @author 李涛
* @version v1.0
* 歌词秀有以下细节注意点:
* 1、没有“窗口”,直接在桌面上绘制歌词
* 2、歌词文字是彩色的,且颜色渐变。已唱歌词与未唱歌词的渐变色不同。歌词、、文字有黑色边框,以便于周围背景清晰区分
* 3、歌词可拖动,当鼠标移上去时会变成可拖动的形状
* 用Java实现,有以下技术点:
* 1、透明窗口
这个需要借助JNA来实现,通过
System.setProperty("sun.java2d.noddraw", "true");
WindowUtils.setWindowTransparent(this,true);
使得窗口透明
* 2、渐变的彩色文字,使用GradientPaint填充一个BufferedImage,BufferedImage的渐变色即为歌词的渐变色。然后取得歌词的形状,
用此BufferedImage填充即可。比较麻烦的是文字的黑色边框,这个最后想了一个办法就是分别向上下左右偏移一个像素绘制
黑色的歌词,然后在其上绘制正常的彩色渐变歌词,这样最终的叠加相关就正好是我们需要的效果。
public class LyncWin extends JDialog {
private static final long serialVersionUID = 1L;
private JLabel infoL
private MyCloseButton closeB
static List&String& msgList = new LinkedList&String&();
public LyncWin()
setTitle("卡拉OK歌词Demo");
setBounds(300, 200, 800, 110);
final ContentPane panel = new ContentPane();
this.setContentPane(panel);
MyMouseListener m = new MyMouseListener(this, panel);
panel.addMouseListener(m);
panel.addMouseMotionListener(m);
getContentPane().setLayout(null);
this.getRootPane().setOpaque(false);
closeButton = new MyCloseButton(this);
closeButton.setOpaque(false);
closeButton.setBounds(0, 0, 18, 18);
closeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
closeButton.setVisible(false);
add(closeButton);
setResizable(false);
this.setUndecorated(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
//com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.93f);
//com.sun.awt.AWTUtilities.setWindowShape(this, new Ellipse2D.Double(0, 0, getWidth(),getHeight()));
this.setAlwaysOnTop(true);
initMsg();
new Timer(30, new ActionListener() {
public void actionPerformed(ActionEvent e) {
LyncWin.this.repaint();//infoLabel.setText(msgList.get(i++));
}).start();
panel.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e) {
closeButton.animateShow();
panel.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
public void mouseExited(MouseEvent e) {
closeButton.animateHide();
System.setProperty("sun.java2d.noddraw", "true");
WindowUtils.setWindowTransparent(this,true);
this.setVisible(true);
// private void makeWinTransparent() {
Pointer winPointer = Native.getComponentPointer(this);
W32API.HWND hwnd = new W32API.HWND();
hwnd.setPointer(winPointer);
IntByReference color = new IntByReference(this.getBackground().getRGB());
User32.INSTANCE.SetWindowLong(hwnd, User32.GWL_EXSTYLE, User32.INSTANCE.GetWindowLong(hwnd, User32.GWL_EXSTYLE)|User32.WS_EX_LAYERED);
User32.INSTANCE.SetLayeredWindowAttributes(hwnd, this.getBackground().getRGB(), (byte)220, User32.LWA_COLORKEY);
this.setVisible(false);
this.setVisible(true);
void initMsg(){
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(Class.class.getResourceAsStream("/Msg.ini")));
while(lnr.ready()){
msgList.add(lnr.readLine());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
class ContentPane extends JPanel{
private static final long serialVersionUID = 1L;
int i = 0; //哪一行歌曲文字
int length = 0; //本行文字的宽度
String msg =
BufferedImage bufferedI
//已唱文字的渐变色彩
private Color gradientStart = new Color(238,254,218);
private Color gradientCenter = new Color(153,254,17);
private Color gradientEnd = new Color(232,254,3);
//未唱文字的渐变色彩
private Color gradientEndU = new Color(14,104,0);
private Color gradientStartU = new Color(134,242,32);
public ContentPane(){
setFont(new Font("黑体",Font.BOLD,40));
this.setOpaque(false);
this.setForeground(this.getBackground());
protected void paintComponent(Graphics g){
if(msg ==null){
msg = msgList.get(0);
Graphics2D g2 = (Graphics2D)g.create();
RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
hints.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(hints);
g2.setColor(new Color(0,0,0));
g2.setFont(getFont());
FontMetrics fm = getFontMetrics(getFont());
Rectangle2D rect = fm.getStringBounds(msg, g2);
if(length&rect.getWidth()){
length = 0;
if(i&=msgList.size()){
msg = msgList.get(i++);
fm = getFontMetrics(getFont());
rect = fm.getStringBounds(msg, g2);
msg = msgList.get(++i);
fm = getFontMetrics(getFont());
rect = fm.getStringBounds(msg, g2);
int x = 0;
int y = 48;
//当关闭按钮可见时,说明鼠标移上来了,此时绘制一个半透明的底纹,以便于用户操作(否则只有当鼠标在文字轮廓
//上时才能收到鼠标事件
if(closeButton.isVisible()){
Graphics2D newg = (Graphics2D)g.create();
newg.setColor(Color.gray);
newg.setComposite(AlphaComposite.SrcOver.derive((float)(closeButton.alpha*0.5)));
newg.fillRoundRect(x,y-((int)rect.getHeight()-fm.getDescent()*3),(int)rect.getWidth(),(int)rect.getHeight(),10,10);
newg.dispose();
//上下左右各偏离1个像素绘制黑色歌词,经过后面的彩色歌词覆盖后,即变成文字的黑色轮廓
g2.drawString(msg, x-1, y);
g2.drawString(msg, x+1, y);
g2.drawString(msg, x, y+1);
g2.drawString(msg, x, y-1);
//绘制渐变彩色歌词
createBufferedImage(fm, rect,length++);
TexturePaint tp = new TexturePaint(bufferedImage, rect);
FontRenderContext frc = g2.getFontRenderContext();
TextLayout tl = new TextLayout(msg, getFont(), frc);
g2.setPaint(tp);
g2.translate(0, y);
g2.fill(tl.getOutline(null));
g2.translate(0, -y);
//g2.drawImage(bufferedImage, null, x, y+14);
g2.dispose();
//采用渐变色绘制文字
protected void createBufferedImage(FontMetrics fm, Rectangle2D rectStr,int length) {
int width = (int)rectStr.getWidth();
int height = (int)rectStr.getHeight()-fm.getDescent()*2;
bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//绘制已唱的文字
Graphics2D g2 = bufferedImage.createGraphics();
GradientPaint painter = new GradientPaint(0, 0, gradientStart, 0, height / 2, gradientCenter);
g2.setPaint(painter);
Rectangle2D rect = new Rectangle2D.Double(0, 0, length, height / 2.0);
g2.fill(rect);
painter = new GradientPaint(0, height / 2, gradientCenter, 0,height, gradientEnd);
g2.setPaint(painter);
rect = new Rectangle2D.Double(0, height / 2.0 , length,height);
g2.fill(rect);
painter = new GradientPaint(0, height / 2-2, gradientCenter, 0,height, gradientCenter);
g2.setPaint(painter);
rect = new Rectangle2D.Double(0, (height / 2.0)-2 , length, 4);
g2.fill(rect);
//绘制未唱的文字
painter = new GradientPaint(0, 0, gradientStartU, 0, height, gradientEndU);
g2.setPaint(painter);
rect = new Rectangle2D.Double(length, 0, width-length, height);
g2.fill(rect);
g2.dispose();
public static void main(String[] args){
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
new LyncWin();
【上篇】【下篇】求IT大能帮忙写个小Java软件,关于显示随机数的,类似彩票的,全部家当奉上啦!!!_百度知道
求IT大能帮忙写个小Java软件,关于显示随机数的,类似彩票的,全部家当奉上啦!!!
一个随机数的软件,一共七位数,前3位可以是固定的100,后四位是有四个框,框里的数是0-9可以滚动的,每隔几秒一个数能缓慢停下,,最好可以设置背景图片,。。
PS:在开始界面可以输入数字范围,有开始键和退出功能
PS2:求各位IT大能帮忙写个这样的小软件...
我有更好的答案
写了一个简单的实现,有啥需要自己改动,供参考public&class&Lottery&extends&JPanel&implements&Runnable{ private&JTextField[]&textFields=&new&JTextField[7]; Image&image&; public&static&void&main(String[]&args)&{
EventQueue.invokeLater(new&Runnable()&{
public&void&run()&{
JFrame&f&=&new&JFrame(&彩票模拟&);
Lottery&l&=&new&Lottery();
f.setContentPane(l);
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(3);
}&catch&(Exception&e)&{
e.printStackTrace();
}); } public&Lottery()&{
Font&font&=&new&Font(&宋体&,Font.BOLD,32);
this.setLayout(new&BorderLayout(0,&0));
JPanel&panel&=&new&JPanel();
panel.setOpaque(false);
this.add(panel,&BorderLayout.CENTER);
for&(int&i&=&0;&i&&&textFields.&i++)&{
textFields[i]&=&new&JTextField(2);
textFields[i].setOpaque(false);
textFields[i].setFont(font);
textFields[i].setForeground(Color.ORANGE);
textFields[i].setHorizontalAlignment(JTextField.CENTER);
panel.add(textFields[i]);
JPanel&panel_1&=&new&JPanel();
panel_1.setOpaque(false);
this.add(panel_1,&BorderLayout.SOUTH);
JButton&btn&=&new&JButton(&Start&);
btn.addActionListener(new&ActionListener(){
public&void&actionPerformed(ActionEvent&e)&{
Thread&t&=&new&Thread(Lottery.this);
t.start();
btn.setContentAreaFilled(false);
btn.setFont(font);
btn.setForeground(Color.BLUE);
panel_1.add(btn);
URL&url&=&new&URL(&);
image&=&ImageIO.read(url);
}&catch&(IOException&e1)&{
e1.printStackTrace();
this.setPreferredSize(new&Dimension(image.getWidth(null)/2,&image.getHeight(null)/2)); }
@Override public&void&paintComponent(Graphics&g){
g.drawImage(image,&0,&0,&this.getWidth(),&this.getHeight(),&null); } @Override public&void&run()&{
Random&r&=&new&Random();
int&i&=&0;
while(i&&&200){
for(int&j&=&0;&j&&&textFields.&j++){
textFields[j].setText(r.nextInt(10)+&&);
Thread.sleep(10);
}&catch&(InterruptedException&e)&{
e.printStackTrace();
您好,我想问下,如果想固定前三位或者说是第四位数字不超过5怎么修改呢
文件太大了,弄个附件吧,修改起来不是很难的,供参考
太棒了,谢谢啦!!!真有用!
采纳率:50%
来自团队:
双色球?大乐透?那个是要组合的,随机啊?楼下的美国女孩,看看你懂不懂
不是,就是4位数的随机
呵呵,你真的下载了楼下的美国女孩的附件啊?!随机很简单啊,不过太罗嗦了,要是我开始学java的时候,估计还有劲,现在没有了
额...看下是什么。。没办法啊,急用啊...
为您推荐:
其他类似问题
随机数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 setenabled false 的文章

 

随机推荐