import java.beans.PropertyVetoException;
import javax.swing.border.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class DesktopManagerDemo extends JFrame implements ActionListener{
protected int m_count;
protected int m_tencount;
protected JButton m_newFrame;
protected JDesktopPane m_desktop;
protected JComboBox m_UIBox;
protected UIManager.LookAndFeelInfo[] m_infos;
protected JLabel m_lActivates, m_lBegindrags, m_lBeginresizes, m_lCloses,
m_lDeactivates, m_lDeiconifies, m_lDrags, m_lEnddrags, m_lEndresizes,
m_lIconifies, m_lMaximizes, m_lMinimizes, m_lOpens, m_lResizes, m_lSetbounds;
protected MyDesktopManager m_myDesktopManager;
protected DMEventCanvas m_dmEventCanvas;
protected Timer m_eventTimer;
public DesktopManagerDemo() {
setTitle("Animated DesktopManager");
m_count = m_tencount = 0;
JPanel innerListenerPanel = new JPanel(new GridLayout(15,1));
JPanel listenerPanel = new JPanel(new BorderLayout());
m_dmEventCanvas = new DMEventCanvas();
m_lActivates = new JLabel("activateFrame");
m_lBegindrags = new JLabel("beginDraggingFrame");
m_lBeginresizes = new JLabel("beginResizingFrame");
m_lCloses = new JLabel("closeFrame");
m_lDeactivates = new JLabel("deactivateFrame");
m_lDeiconifies = new JLabel("deiconifyFrame");
m_lDrags = new JLabel("dragFrame");
m_lEnddrags = new JLabel("endDraggingFrame");
m_lEndresizes = new JLabel("endResizingFrame");
m_lIconifies = new JLabel("iconifyFrame");
m_lMaximizes = new JLabel("maximizeFrame");
m_lMinimizes = new JLabel("minimizeFrame");
m_lOpens = new JLabel("openFrame");
m_lResizes = new JLabel("resizeFrame");
m_lSetbounds = new JLabel("setBoundsForFrame");
innerListenerPanel.add(m_lActivates);
innerListenerPanel.add(m_lBegindrags);
innerListenerPanel.add(m_lBeginresizes);
innerListenerPanel.add(m_lCloses);
innerListenerPanel.add(m_lDeactivates);
innerListenerPanel.add(m_lDeiconifies);
innerListenerPanel.add(m_lDrags);
innerListenerPanel.add(m_lEnddrags);
innerListenerPanel.add(m_lEndresizes);
innerListenerPanel.add(m_lIconifies);
innerListenerPanel.add(m_lMaximizes);
innerListenerPanel.add(m_lMinimizes);
innerListenerPanel.add(m_lOpens);
innerListenerPanel.add(m_lResizes);
innerListenerPanel.add(m_lSetbounds);
listenerPanel.add("Center", m_dmEventCanvas);
listenerPanel.add("West", innerListenerPanel);
listenerPanel.setOpaque(true);
listenerPanel.setBackground(Color.white);
m_myDesktopManager = new MyDesktopManager();
m_desktop = new JDesktopPane();
m_desktop.setDesktopManager(m_myDesktopManager);
m_desktop.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
m_newFrame = new JButton("New Frame");
m_newFrame.addActionListener(this);
m_infos = UIManager.getInstalledLookAndFeels();
String[] LAFNames = new String[m_infos.length];
for(int i=0; i<m_infos.length; i++) {
LAFNames[i] = m_infos[i].getName();
}
m_UIBox = new JComboBox(LAFNames);
m_UIBox.addActionListener(this);
JPanel topPanel = new JPanel(true);
topPanel.setLayout(new FlowLayout());
topPanel.setBorder(new CompoundBorder(
new SoftBevelBorder(BevelBorder.LOWERED),
new CompoundBorder(new EmptyBorder(2,2,2,2),
new SoftBevelBorder(BevelBorder.RAISED))));
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", topPanel);
getContentPane().add("Center", m_desktop);
getContentPane().add("South", listenerPanel);
((JPanel) getContentPane()).setBorder(new CompoundBorder(
new SoftBevelBorder(BevelBorder.LOWERED),
new CompoundBorder(new EmptyBorder(1,1,1,1),
new SoftBevelBorder(BevelBorder.RAISED))));
topPanel.add(m_newFrame);
topPanel.add(new JLabel("Look & Feel:",SwingConstants.RIGHT));
topPanel.add(m_UIBox);
setSize(645,600);
Dimension dim = getToolkit().getScreenSize();
setLocation(dim.width/2-getWidth()/2,
dim.height/2-getHeight()/2);
setVisible(true);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);
m_eventTimer = new Timer(1000, this);
m_eventTimer.setRepeats(true);
m_eventTimer.start();
}
public void newFrame() {
JInternalFrame jif = new JInternalFrame("Frame " + m_count,
true, true, true, true);
jif.setBounds(20*(m_count%10) + m_tencount*80,
20*(m_count%10), 200, 200);
JLabel label = new JLabel();
label.setBackground(Color.white);
label.setOpaque(true);
jif.getContentPane().add(label);
m_desktop.add(jif);
try {
jif.setSelected(true);
}
catch (PropertyVetoException pve) {
System.out.println("Could not select " + jif.getTitle());
}
m_count++;
if (m_count%10 == 0) {
if (m_tencount < 3)
m_tencount++;
else
m_tencount = 0;
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == m_newFrame)
newFrame();
else if (e.getSource() == m_eventTimer) {
m_dmEventCanvas.render(m_myDesktopManager.getCounts());
m_myDesktopManager.clearCounts();
}
else if (e.getSource() == m_UIBox) {
try {
m_UIBox.hidePopup(); //BUG WORKAROUND
UIManager.setLookAndFeel(m_infos[m_UIBox.getSelectedIndex()].getClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception ex) {
System.out.println("Could not load " +
m_infos[m_UIBox.getSelectedIndex()].getClassName());
}
}
}
public static void main(String[] args) {
new DesktopManagerDemo();
}
}
class MyDesktopManager
extends DefaultDesktopManager
{
protected int[] m_counts = new int[15];
public void clearCounts() {
for (int i=0; i<15; i++) {
m_counts[i] = 0;
}
}
public int[] getCounts() { return m_counts; }
public void activateFrame(JInternalFrame f) {
super.activateFrame(f);
m_counts[0]++;
}
public void beginDraggingFrame(JComponent f) {
m_counts[1]++;
}
public void beginResizingFrame(JComponent f, int direction) {
m_counts[2]++;
}
public void closeFrame(JInternalFrame f) {
super.closeFrame(f);
m_counts[3]++;
}
public void deactivateFrame(JInternalFrame f) {
super.deactivateFrame(f);
m_counts[4]++;
}
public void deiconifyFrame(JInternalFrame f) {
super.deiconifyFrame(f);
m_counts[5]++;
}
public void dragFrame(JComponent f, int newX, int newY) {
f.setLocation(newX, newY);
m_counts[6]++;
}
public void endDraggingFrame(JComponent f) {
m_counts[7]++;
}
public void endResizingFrame(JComponent f) {
m_counts[8]++;
}
public void iconifyFrame(JInternalFrame f) {
super.iconifyFrame(f);
m_counts[9]++;
}
public void maximizeFrame(JInternalFrame f) {
super.maximizeFrame(f);
m_counts[10]++;
}
public void minimizeFrame(JInternalFrame f) {
super.minimizeFrame(f);
m_counts[11]++;
}
public void openFrame(JInternalFrame f) {
m_counts[12]++;
}
public void resizeFrame(JComponent f,
int newX, int newY, int newWidth, int newHeight) {
f.setBounds(newX, newY, newWidth, newHeight);
m_counts[13]++;
}
public void setBoundsForFrame(JComponent f,
int newX, int newY, int newWidth, int newHeight) {
f.setBounds(newX, newY, newWidth, newHeight);
m_counts[14]++;
}
}
class DMEventCanvas
extends JComponent
{
protected Color[] m_colors = new Color[15];
protected int[][] m_arrays = new int[15][12];
public DMEventCanvas() {
setPreferredSize(new Dimension(505,255));
for (int i=0; i<15; i++) {
m_arrays[i] = new int[12];
m_colors[i] = new Color(37+i*4, 37+i*4, 37+i*4);
}
}
public void paintEventSquare(Graphics g, int value, int currwidth,
int currheight, int cellwidth, int cellheight, Color color) {
if(value != 0) {
g.setColor(color);
g.fillRect(currwidth, currheight, cellwidth, cellheight);
g.setColor(Color.green);
g.drawString("" + value, currwidth + 5, currheight + 14);
}
g.setColor(Color.black);
g.drawRect(currwidth, currheight, cellwidth, cellheight);
}
public void paintComponent(Graphics g) {
int cellheight = 17;
int cellwidth = 42;
int currwidth = 0;
int currheight = 0;
for (int i=0; i < 12; i++) {
for (int j=0; j < 15; j++) {
paintEventSquare(g, m_arrays[j][i], currwidth, currheight,
cellwidth, cellheight, m_colors[j]);
currheight += cellheight;
}
currheight = 0;
currwidth += cellwidth;
}
}
public void render(int[] counts) {
for (int i=0; i < 11; i++) {
for (int j=0; j < 15; j++) {
m_arrays[j][i] = m_arrays[j][i+1];
}
}
for (int k=0; k < 15; k++) {
m_arrays[k][11] = counts[k];
}
paintImmediately(new Rectangle(20,20,505,255));
}
}
|