package trident.swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import me.chenyi.mm.ui.AlphaPanel;
import org.pushingpixels.trident.Timeline;
/** Created with IntelliJ IDEA. User: seanc Date: 28/11/12 Time: 13:45 */
public class SlidePanelWithoutLayoutTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(800, 600);
SlidePanel slidePanel = new SlidePanel(frame.getContentPane());
frame.getContentPane().add(slidePanel, BorderLayout.CENTER);
JButton runButton = new JButton("Run");
final Timeline timeline = new Timeline(slidePanel);
timeline.setDuration(2500);
runButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (!timeline.isDone())
timeline.cancel();
timeline.clearPropertyToInterpolate();
timeline.addPropertyToInterpolate("ratio", 0f, 1f);
timeline.addPropertyToInterpolate("alpha", 0f, 1f);
timeline.play();
}
});
frame.getContentPane().add(runButton, BorderLayout.NORTH);
frame.setVisible(true);
}
public static class SlidePanel extends JPanel
{
public Component parent;
public float ratio;
public float alpha;
private final AlphaPanel backPanel = new AlphaPanel();
private final JPanel frontPanel = new JPanel();
private SlidePanel(Component parent)
{
this.parent = parent;
setLayout(null);
backPanel.setBackground(Color.green);
backPanel.setMaximumSize(new Dimension(400, 300));
backPanel.setPreferredSize(new Dimension(400, 300));
backPanel.setSize(new Dimension(400, 300));
backPanel.setLocation(100, 100);
backPanel.add(new JLabel("This is a label"));
backPanel.setAlpha(0.1f);
backPanel.setOpaque(false);
add(backPanel);
frontPanel.setBackground(Color.blue);
frontPanel.setMaximumSize(new Dimension(300, 400));
frontPanel.setPreferredSize(new Dimension(300, 400));
frontPanel.setSize(new Dimension(300, 400));
frontPanel.setLocation(50, 50);
// add(frontPanel);
parent.addComponentListener(new ComponentAdapter()
{
@Override
public void componentResized(ComponentEvent e)
{
}
@Override
public void componentMoved(ComponentEvent e)
{
}
@Override
public void componentShown(ComponentEvent e)
{
}
@Override
public void componentHidden(ComponentEvent e)
{
}
});
}
public void setRatio(float ratio)
{
this.ratio = ratio;
Dimension size = parent.getSize();
// backPanel.setMaximumSize(new Dimension(size.width * slide / 100, size.height * slide / 100));
backPanel.setSize(new Dimension((int)(size.width * ratio), (int)(size.height * ratio)));
revalidate();
}
public float getRatio()
{
return ratio;
}
public float getAlpha()
{
return alpha;
}
public void setAlpha(float alpha)
{
this.alpha = alpha;
backPanel.setAlpha(alpha);
// revalidate();
}
}
}