兩個步驟:
LayerUI layerUI = new XxxLayerUI(); //創建LayerUI對象,擴充的子類,重寫paint(Graphics g,JComponent f方法),用以實現不同的裝飾層
var layer = new JLayer(panel,layerUI);// 使用layerUI裝飾組件panel
package net.cszxxx.www;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLayer;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.plaf.LayerUI;
public class JLayerTest {
class FirstLayerUI extends LayerUI<JComponent>{
public void paint(Graphics g,JComponent c) {//Graphics類,我的理解是創建一張“畫布”
super.paint(g,c);//調用父類paint方法,將組件c繪製到g畫布上
var g2 = (Graphics2D)g.create();//g調用create方法創建Graphics2D對象
//這個Graphics2D類擴展了Graphics類,
//以提供對幾何、座標變換、顏色管理和文本佈局的更復雜的控制。
g2.setComposite(AlphaComposite. //設置 Graphics2D的上下文。
getInstance(AlphaComposite.SRC_OVER,.5f));
g2.setPaint(new GradientPaint(0,0,Color.RED,//設置Graphics2D上下文的Paint屬性爲紅藍過渡色
0,c.getHeight(),Color.BLUE));
g2.fillRect(0, 0, c.getWidth(), c.getHeight());//繪製跟組件大小一樣的矩形
g2.dispose();//釋放資源
}
}
public void init() {
var jf = new JFrame("LayerUI測試");
var p = new JPanel();
var group = new ButtonGroup();
JRadioButton radioButton;
p.add(radioButton = new JRadioButton("網購購買",true));
group.add(radioButton);
p.add(radioButton = new JRadioButton("書店購買"));
group.add(radioButton);
p.add(radioButton = new JRadioButton("圖書館借閱"));
group.add(radioButton);
p.add(new JCheckBox("測試1"));
p.add(new JCheckBox("測試2"));
p.add(new JCheckBox("測試3"));
p.add(new JCheckBox("測試4"));
var orderButton = new JButton("投票");
p.add(orderButton);
LayerUI<JComponent> layerUI = new FirstLayerUI();//創建layerUI對象
var layer = new JLayer<JComponent>(p,layerUI);//使用將layerUI裝飾組件P
jf.add(layer);
jf.setSize(300,170);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
// TODO 自動生成的方法存根
new JLayerTest().init();
}
}