swing创建自定义窗体界面

创建自定义外观的窗体,主要先了解以下步骤:


  • 设置窗口完全透明:AWTUtilities.setWindowOpaque(frame, false);
  • 设置窗口无边缘:frame.setUndecorated(true);
  • 设置窗口的ContentPane为要显示的Pane:frame.setContentPane(myPane);
  • 在myPane中放置具体要显示的内容,也可以重载paint方法进行Java2D绘制。这些paint会直接发生在桌面背景上。
1.主窗体文件
package test;

import java.awt.Graphics;

import javax.swing.*;

import com.sun.awt.AWTUtilities;

public class TranslucentWindow extends JFrame{
    public TranslucentWindow() {
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	setUndecorated(true);
    	AWTUtilities.setWindowOpaque(this, false);
    	setBounds(500, 500, 300, 300);
        JPanel pane = new JPanel() {  
        	  
            @Override  
            public void paint(Graphics g) {  
                super.paint(g);  
                
                g.drawImage(new ImageIcon("qq.png").getImage(), 0, 0, 348, 265, this);
            }  
        };
        
        FrameListener moveListener = new FrameListener(this);
        
        addMouseListener(moveListener);
        addMouseMotionListener(moveListener);
        
        setSize(348, 265);
        setContentPane(pane);  
        setVisible(true);
    }

    public static void main(String[] args) {
        new TranslucentWindow();
    }

}

因为设置了窗口无边缘,所以无法使用鼠标拖动窗体。
下面是实现自定义窗体鼠标拖动。
package test;

import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class FrameListener extends MouseAdapter {
	private Point lastPoint = null;
	private TranslucentWindow window = null;
	
	public FrameListener(TranslucentWindow window){
		this.window = window;
	}
	
	@Override
	public void mousePressed(MouseEvent e){
		lastPoint = e.getLocationOnScreen();
		System.out.println(lastPoint);
	}
	
	@Override
	public void mouseDragged(MouseEvent e){
		System.out.println(e);
		Point point = e.getLocationOnScreen();
		int offsetX = point.x - lastPoint.x;
		int offsetY = point.y - lastPoint.y;
		
		Rectangle bounds = window.getBounds();
		bounds.x += offsetX;
		bounds.y += offsetY;
		window.setBounds(bounds);
		lastPoint = point;
	}
}

主要是根据鼠标点击记录坐标,当鼠标拖动结束时再次记录坐标,最后通过setBounds绝对定位窗体。

运行结果截图:


注:窗体上的功能并没有实现,仅仅是窗体的背景图是QQ登录窗口。不过根据这个窗体自定义原理,则可以做出美轮美奂的界面
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java窗体组件的样式可以通过修改UI(User Interface)来自定义JavaSwing组件库提供了一种称为“可插拔外观(Pluggable Look and Feel)”的机制,使得可以在不修改应用程序代码的情况下,改变应用程序的外观和感觉。 可以通过编写自定义UI类来实现对Swing组件的自定义样式。例如,以下代码演示了如何创建一个自定义按钮UI,并将其应用于JButton组件: ```java import java.awt.*; import javax.swing.*; public class CustomButtonUI extends BasicButtonUI { // 重写绘制按钮的方法,实现自定义样式 @Override public void paint(Graphics g, JComponent c) { JButton button = (JButton) c; Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(Color.BLUE); g2.fillRoundRect(0, 0, button.getWidth(), button.getHeight(), 10, 10); g2.setColor(Color.WHITE); g2.drawString(button.getText(), button.getWidth() / 2 - button.getFontMetrics(button.getFont()).stringWidth(button.getText()) / 2, button.getHeight() / 2 + button.getFontMetrics(button.getFont()).getHeight() / 3); } } // 创建一个自定义按钮 JButton button = new JButton("Click me!"); // 应用自定义UI button.setUI(new CustomButtonUI()); ``` 上述代码中,首先创建了一个自定义的按钮UI类CustomButtonUI,重写了paint方法,实现自定义样式。然后创建了一个JButton,将自定义UI应用于该按钮组件。 通过这种方式,可以对各种Swing组件进行自定义样式的设置,实现更加美观的界面效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值