62,615
社区成员
发帖
与我相关
我的任务
分享
public class TranslucenceJPanel extends JPanel {
private float transparency;
public TranslucenceJPanel(){
}
/**set the transparency
*
* @param transparency:the transparency you want to set
*
* @return void
*/
public void setTransparent(float transparency) {
this.transparency = transparency;
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D graphics2d = (Graphics2D) g.create();
graphics2d.setComposite(AlphaComposite.SrcOver.derive(transparency));
graphics2d.fill(getBounds());
graphics2d.dispose();
}
}
//主JPanel
contentPane = new JPanel();
contentPane.setOpaque(false);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(null);
setContentPane(contentPane);
//列表panel
listPanel = new TranslucenceJPanel();
listPanel.setLayout(null);
listPanel.setOpaque(false);
listPanel.setBounds(46, 114, 315, 521);
listPanel.setTransparent(0.5f);
contentPane.add(listPanel);
package trans;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TranslucenceJPanel extends JPanel {
private float transparency = .1f;
public TranslucenceJPanel(){
}
/**set the transparency
*
* @param transparency:the transparency you want to set
*
* @return void
*/
public void setTransparent(float transparency) {
this.transparency = transparency;
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D graphics2d = (Graphics2D) g.create();
graphics2d.setComposite(AlphaComposite.SrcOver.derive(transparency));
graphics2d.setColor(Color.green);
graphics2d.fillRect(0, 0, 100, 100);
graphics2d.dispose();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(new Dimension(800, 600));
frame.setPreferredSize(new Dimension(800, 600));
frame.add(new TranslucenceJPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
测试之后确认没有什么大问题;
1.setTransparent方法是否有调用;
2.graphics2d.fill()可以指定填充范围;
3.布局也可能是问题;
package test;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class TestPanel extends JFrame {
public TestPanel() {
TranslucenceJPanel px = new TranslucenceJPanel();
px.setTransparent(.5f);
add(px, BorderLayout.CENTER);
px.setPreferredSize(new Dimension(200, 200));
setResizable(true);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public class TranslucenceJPanel extends JPanel {
private float transparency;
public TranslucenceJPanel() {
}
public void setTransparent(float transparency) {
this.transparency = transparency;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D graphics2d = (Graphics2D) g.create();
graphics2d.setComposite(AlphaComposite.SrcOver.derive(transparency));
graphics2d.fill(getBounds());
System.out.println(getBounds());
graphics2d.dispose();
}
}
public static void main(String[] args) {
new TestPanel();
}
}