Project: Bit4Tat
    /**
     *  BitPanel.java - A base class for the various child JPanels. 
     * Copyright (C) 2011 Josh Dorothy, Ben Harrington, Max Thayer  
     *  
     * This program is free software: you can redistribute it and/or modify 
     * it under the terms of the GNU Affero General Public License as 
     * published by the Free Software Foundation, either version 3 of the 
     * License, or (at your option) any later version. 
     *  
     * This program is distributed in the hope that it will be useful, 
     * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     * GNU Affero General Public License for more details. 
     *  
     * You should have received a copy of the GNU Affero General Public License 
     * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
     */
 
package com.Bit4Tat; 
 
import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
 
import javax.imageio.ImageIO; 
import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
 
public class BitPanel extends JPanel { 
 
 protected static final long serialVersionUID = 1L
 protected static final Color headerColor = new Color(240240240); 
 protected static final Color rolloverColor = new Color(245245255); 
 protected static final Color selectedColor = Color.BLUE;  
 protected JButton currentButton; 
 protected SubPanel currentSubPanel; 
  
 protected Wallet w; 
  
 public BitPanel(Wallet w) 
 
  this.w = w; 
 
  
 protected JPanel createHeaderPanel(String iconFilename, String headerText) { 
   
  JPanel headerPanel = new JPanel(new BorderLayout()); 
 
  JPanel headerTempPanel = new JPanel(); 
  headerTempPanel.setLayout(new BoxLayout(headerTempPanel, BoxLayout.LINE_AXIS)); 
  headerTempPanel.add(Box.createRigidArea(new Dimension(100))); 
  headerTempPanel.setBackground(headerColor); 
  headerTempPanel.setBorder(BorderFactory.createMatteBorder(10101010, headerColor)); 
   
  BufferedImage cornerLogo = null
  JLabel cornerLabel = null;    
   
  try { 
   File f = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + iconFilename); 
   cornerLogo = ImageIO.read(f); 
  catch (IOException e) { 
   System.err.println("There was a problem reading " + iconFilename + " from the disk.  Is it in the correct location?"); 
   e.printStackTrace(); 
  
   
  if (cornerLogo != null) { 
   cornerLabel = new JLabel(new ImageIcon(cornerLogo)); 
  
  else { 
   cornerLabel = new JLabel(); 
  
   
  headerTempPanel.add(cornerLabel); 
      
  JTextField headerTextBox = new JTextField() { 
 
   private static final long serialVersionUID = 1L
 
   @Override 
            public void paintComponent(Graphics g) { 
                Graphics2D graphics2d = (Graphics2D) g; 
                graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                        RenderingHints.VALUE_ANTIALIAS_ON); 
                super.paintComponent(g); 
            } 
  }; 
 
  headerTextBox.setDropTarget(null); 
  headerTextBox.setLayout(new BorderLayout()); 
  headerTextBox.setText(headerText); 
  headerTextBox.setHorizontalAlignment(JTextField.RIGHT); 
  headerTextBox.setFont(new Font("Verdana", Font.BOLD, 64)); 
  headerTextBox.setEditable(false); 
  headerTextBox.setOpaque(false); 
  headerTextBox.setFocusable(false); 
  headerTextBox.setBorder(BorderFactory.createEmptyBorder()); 
  headerTempPanel.add(headerTextBox); 
  headerTempPanel.add(Box.createRigidArea(new Dimension(100))); 
  headerPanel.add(headerTempPanel, BorderLayout.CENTER); 
 
  return headerTempPanel; 
 
  
 protected JPanel createSidePanel(BitPanel panel, SubPanel subPanel, String header, String... buttonText) { 
   
  JPanel sidePanel = new JPanel(); 
   
  sidePanel.setBackground(Color.WHITE); 
  sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.Y_AXIS)); 
  sidePanel.add(Box.createRigidArea(new Dimension(010)));    
  sidePanel.setBorder(BorderFactory.createMatteBorder(1001, Color.DARK_GRAY));    
   
  JButton headerBox = new JButton(" " + header + " "); 
  headerBox.setFont(new Font("Verdana", Font.BOLD, 24)); 
  headerBox.setContentAreaFilled(false); 
  headerBox.setOpaque(false); 
  headerBox.setFocusable(false); 
  headerBox.setBackground(Color.WHITE); 
  headerBox.setBorder(BorderFactory.createEmptyBorder()); 
   
  sidePanel.add(headerBox, JButton.CENTER); 
  sidePanel.add(Box.createRigidArea(new Dimension(020))); 
      
  JPanel boxList = new JPanel() { 
   private static final long serialVersionUID = 1L
 
   @Override 
            public void paintComponent(Graphics g) { 
                Graphics2D graphics2d = (Graphics2D) g; 
                graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                        RenderingHints.VALUE_ANTIALIAS_ON); 
                super.paintComponent(g); 
            }     
  }; 
  boxList.setBackground(Color.WHITE); 
  boxList.setBorder(BorderFactory.createEmptyBorder()); 
  boxList.setLayout(new BoxLayout(boxList, BoxLayout.Y_AXIS));   
   
  boolean setCurrent = false
  for (String s: buttonText) { 
    
   JButton button = new JButton(s);    
   button.addMouseListener(new RolloverListener(this, subPanel));    
   button.setFont(new Font("Verdana", Font.BOLD, 16)); 
   button.setContentAreaFilled(true); 
   button.setBackground(Color.WHITE); 
   button.setFocusPainted(false); 
   button.setBorderPainted(false); 
    
   if (setCurrent == false) { 
    setCurrent = true
    button.setForeground(selectedColor); 
    panel.currentButton = button;     
   
    
   boxList.add(button); 
  
 
  sidePanel.add(boxList); 
  sidePanel.add(Box.createRigidArea(new Dimension(100)));    
 
  return sidePanel; 
 
  
 class SubPanel extends JPanel { 
 
  private static final long serialVersionUID = 1L
 
  public SubPanel () { 
 
   this.setDoubleBuffered(true);    
   this.setBackground(Color.WHITE);  
  
   
  public SubPanel (String header) { 
 
   this.setDoubleBuffered(true);    
   this.setBackground(Color.WHITE); 
   this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));   
   HeaderLabel headerText = new HeaderLabel (header); 
   this.add(Box.createRigidArea(new Dimension(100)));   
   this.add(Box.createRigidArea(new Dimension(010)));   
   this.add(headerText);    
  }   
   
  @Override 
        public void paintComponent(Graphics g) { 
            Graphics2D graphics2d = (Graphics2D) g; 
            graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                    RenderingHints.VALUE_ANTIALIAS_ON); 
            super.paintComponent(g); 
        }     
 
  
 class HeaderLabel extends JLabel { 
   
  private static final long serialVersionUID = 1L
 
  public HeaderLabel (String s) { 
   this.setText(s); 
   this.setFont(new Font("Verdana", Font.BOLD, 32)); 
  
   
  public HeaderLabel (String s, int fontSize) { 
   this.setText(s); 
   this.setFont(new Font("Verdana", Font.BOLD, fontSize)); 
  }   
 
  
 class RolloverListener extends MouseAdapter { 
   
  BitPanel mainPanel; 
  SubPanel subPanel; 
   
  public RolloverListener (BitPanel panel, SubPanel subPanel) { 
   this.mainPanel = panel; 
   this.subPanel = subPanel; 
  
   
  public void mouseEntered(MouseEvent e) { 
   ((JButton)e.getComponent()).setBackground(rolloverColor); 
   repaint(); 
  
   
  public void mouseExited(MouseEvent e) { 
   ((JButton)e.getComponent()).setBackground(Color.WHITE); 
   repaint();    
  
   
  public void mouseClicked(MouseEvent e) { 
    
   if (currentButton != null
    currentButton.setForeground(Color.DARK_GRAY); 
    
   currentButton = (JButton)e.getComponent(); 
   currentButton.setForeground(selectedColor);   
    
   CardLayout cl = (CardLayout)subPanel.getLayout(); 
   cl.show(subPanel, currentButton.getText());    
    
   subPanel.validate(); 
  
 
}