package com.saic.mscatalog.plugin.item;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
public class PluginPanel extends JPanel implements ListCellRenderer {
private PluginInfo pluginInfo = null;
private Image image = null;
private JPanel imagePanel = null;
private JButton imageBtn = null;
private static Dimension itemSize = new Dimension(255, 255);
public PluginPanel(PluginInfo pluginInfo) {
this.pluginInfo = pluginInfo;
this.image = new ImageIcon(pluginInfo.getImagePath()).getImage();
initDisplay();
}
private void initDisplay() {
this.setSize(itemSize);
this.setBackground(new Color(51, 51, 51));
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
this.setLayout(gridbag);
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.CENTER;
JLabel nameLabel = new JLabel();
nameLabel.setFont(new Font("Arial", Font.PLAIN, 19));
nameLabel.setForeground(Color.WHITE);
nameLabel.setText(pluginInfo.getName());
gridbag.setConstraints(nameLabel, c);
this.add(nameLabel);
c.gridx = 0;
c.gridy = 1;
imagePanel = new ImagePanel();
gridbag.setConstraints(imagePanel, c);
this.add(imagePanel);
imagePanel.setLayout(new BoxLayout(imagePanel, BoxLayout.Y_AXIS));
imagePanel.add(Box.createVerticalStrut(70));
imageBtn = new JButton("加载");
imageBtn.setPreferredSize(new Dimension(65, 25));
imageBtn.setAlignmentX(Component.CENTER_ALIGNMENT);
imagePanel.add(imageBtn);
this.addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent e) {
if (e.getX() > PluginPanel.this.getWidth() || e.getY() > PluginPanel.this.getHeight() || e.getX() < 0 || e.getY() < 0) {
imageBtn.setVisible(false);
PluginPanel.this.setBackground(new Color(51, 51, 51));
// PluginPanel.this.setBorder(border);
}
}
@Override
public void mouseEntered(MouseEvent e) {
imageBtn.setVisible(true);
PluginPanel.this.setBackground(new Color(38, 38, 38));
// PluginPanel.this.setBorder(border);
}
});
}
private JButton getImageButton(){
JButton btn = new JButton();
btn.setSize(image .getWidth(null), image.getHeight(null));
btn.setIcon(null);
btn.setMargin(new Insets(0, 0, 0, 0));
btn.setIconTextGap(0);
btn.setBorderPainted(false);
btn.setBorder(null);
btn.setText(null);
btn.setPressedIcon(new ImageIcon("images/button-down.png"));
// btn.setRolloverIcon(new ImageIcon("images/button-over.png"));
// btn.setSelectedIcon(new ImageIcon("images/button-sel.png"));
// btn.setRolloverSelectedIcon(new ImageIcon("images/button-sel-over.png"));
// btn.setDisabledIcon(new ImageIcon("images/button-disabled.png"));
// btn.setDisabledSelectedIcon(new ImageIcon("images/button-disabled-selected.png"));
return null;
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
// TODO Auto-generated method stub
return null;
}
private class ImagePanel extends JPanel {
public ImagePanel() {
this.setSize(image.getWidth(null), image.getHeight(null) * 2);
this.setPreferredSize(new Dimension(image.getWidth(null), image.getHeight(null) * 2));
}
public Insets getInsets() {
return new Insets(0, 0, 0, 0);
}
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(createReflection(image), 0, 0, null);
}
}
private BufferedImage createReflection(Image image) {
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage result = new BufferedImage(width, height * 2, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = result.createGraphics();
// 画原始图片。
g2.drawImage(image, 0, 0, null);
// 画黑影。
GradientPaint shadow = new GradientPaint(0, 0, Color.BLACK, 0, 5, Color.DARK_GRAY, true);
g2.setPaint(shadow);
g2.fillRect(0, height, width, height + 5);
// 画对称图片。
g2.scale(1.0, -1.0);
g2.drawImage(image, 0, -2 * height - 10, null);
g2.scale(1.0, -1.0);
// 对称图片设置渐变。
g2.translate(0, height);
Color c1 = new Color(255, 255, 255, 150);
Color c2 = new Color(0, 0, 0, 255);
GradientPaint mask = new GradientPaint(0, 0, c1, 0, height, c2);
g2.setPaint(mask);
g2.setComposite(AlphaComposite.DstOut);
g2.fillRect(0, 0, width, height);
g2.dispose();
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();
jf.setSize(itemSize);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.getContentPane().add(new PluginPanel(PluginInfoGen.getPluginInfos().get(0)));
jf.setVisible(true);
}
}