Java图形开发相关

来源:互联网 发布:电脑视频剪辑小软件 编辑:程序博客网 时间:2024/05/22 05:07

Swing渲染基本原理


1.事件:事件派发线程(EDT);

2.绘制:

  1)异步重绘:Component.repaint() 、Component.repaint(int x, int y, int width, int height)

  2)同步绘制:JComponent.paintImmediately(int x, int y, int width, int height)和JComponent.paintlmmediately(Rectangle r) 、Component.paint(Graphics g)

3.渲染:

  JComponent.paintComponent(Graphics g) 、Component.paint(Graphics g) 、Jcomponent.setOpaque(Boolean b)

  1)paintComponent()

import java.awt.Color;import java.awt.Graphics;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.SwingUtilities;@SuppressWarnings("serial")public class OvalComponent extends JComponent {public void paintComponent(Graphics g) {g.setColor(getBackground());g.fillRect(0, 0, getWidth(), getHeight());g.setColor(Color.GRAY);g.fillOval(0, 0, getWidth(), getHeight());}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {JFrame frame = new JFrame("Oval");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(200, 180);frame.add(new OvalComponent());frame.setVisible(true);}});}}

  2)paint()

import java.awt.AlphaComposite;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.SwingUtilities;@SuppressWarnings("serial")public class TranslucentButton extends JButton {BufferedImage buttonImage;public TranslucentButton(String label) {super(label);setOpaque(false);}public void paint(Graphics g) {if(buttonImage == null ||buttonImage.getWidth() != getWidth() ||buttonImage.getHeight() != getHeight()) {buttonImage = (BufferedImage)createImage(getWidth(),getHeight());}Graphics gButton = buttonImage.getGraphics();gButton.setClip(g.getClip());super.paint(gButton);Graphics2D g2d = (Graphics2D)g;AlphaComposite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,.5f);g2d.setComposite(newComposite);g2d.drawImage(buttonImage, 0, 0, null);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {JFrame frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(200, 100);frame.add(new TranslucentButton("Translucent Button"));frame.setVisible(true);}});}}

  3)setOpaque()

4双缓冲

5线程

  java.swing.Timer 、SwingWorker

0 0
原创粉丝点击