ceyesuma -4 Posting Pro

I have a desktop aplication with internalframes (inner classes) in a class KeyBrowser.java(the desktopPane).
I built a form FourComponentJPanel.form(java)??
the keyBrowser.java allows me to click a JMenuItem to create createDataBaseWindow().

I wanted to have the liberty to have another class that hold the JPanel FourComponentJPanel.java(templet if you will)
In the class ComponetTypes I am trying to have innerclasses that the above mentioned createDataBaseWindow() can
call and over ride the FourComponentJPanel.java(not to make this to confusing???should this be a JPanel or a JComponent???)
any way I wanted my createDataBaseWindow() to be able to call the ComponentTypes.javas' innerclasses and overide the
FourComponent inner class(or any future inner class to have the ability to change configureation)so I can name the buttons and do
different things with an instance and still be able to uses these ComponentType.java inner classes by any other Internal frames that call.
(Is this possible?)
This is the error: an enclosing instance that contains keys_desk.ComponentTypes.FourComponentJPanel is required.

This is the code for my desktop application(keys_desk.KeyBrowser) and the class to maintain a consistant class of inner class components
(keys_desk.ComponentTypes).
I hope I can develope this particular archetecture.
Thank you for your time.
////////////////////////////////////////////////////////////////////////////////

/*
 * KeyBrowser.java
 *
 * Created on December 13, 2007, 4:16 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package keys_desk;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;


import keycards.KeyFrame4;
import keycards.TPanel;
import newpanels.FileChooserDemo;
import newpanels.QuizProg;
import componentJPanels.*;
//import componentJPanels.ScrollJPanelComponent;
import newpanels.SaveJPanel;
import newpanels.SaveJPanel;
//import keys_desk.SplashScreen;
/**
 *
 * @author James Howerton
 */
import newpanels.StandardJMenu;
//import componentJPanels.ButtonJPanelComponent;
import keys_desk.ComponentTypes.FourComponentJPanel;
public class KeyBrowser extends JFrame implements ActionListener{
    JDesktopPane desktopPane = new JDesktopPane();
   private KeyFrame4 keyFrame4;
   private TPanel tPanel;
  // private ButtonJPanelComponent buttonJPanelComponent;
   private ComponentTypes.FourComponentJPanel fourComponentJPanel;
   private JTextAreaJPanelComponent newJPanel;
   private ScrollJPanelComponent openJPanel;
   private SaveJPanel saveJPanel;
   private JMenuItem openJMenuItem;
   private JPanel xPanel;
    private String newline;
   private JTextArea log;
   private QuizProg quizProg;
   private AddComponentJPanel addComponentJPanel;

    private GridLayout layout;

    private JPanel transferPanel;
   private KeyBrowser() {
        //Create the log first, because the action listeners
        FileChooserDemo fileChooserDemo =new FileChooserDemo();
        StandardJMenu standardJMenu;
        //createQuizWindow();////////////////////////////startwindow
        Container contentPane = getContentPane();
        contentPane.add(desktopPane);
        /*************note***********
         *jMenuBar population
         *Create all JMenu
         *set JMenu setMnewmonic
         *create each JMenuItems in a block for each applicable JMenu
         *set JMenuItems setMnewmonic()
         *populate each JMenu with thier JMenuItems
         ************note**
         *File JMenuItmes are controled by innerclasses
         *************************
         *populate and setJMenuBar()
         */
        //***************reusable notes for creating a new menu Item***********
        //create JMenuItems for ________JMenuItem to _________JMenu("__")
        //set ________JmenuItems with setMnewmonic()
        //add _________JmenuItem to view
        //Create JMenus
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu viewMenu = new JMenu("View");
        JMenu insertMenu = new JMenu("Insert");
        JMenu toolsMenu= new JMenu("Tools");
        JMenu windowMenu=new JMenu("Window");
        JMenu helpMenu=new JMenu("Help");
        //set Mnemonic Jmenu
        fileMenu.setMnemonic('F');
        editMenu.setMnemonic('E');
        viewMenu.setMnemonic('V');
        insertMenu.setMnemonic('I');
        toolsMenu.setMnemonic('T');
        windowMenu.setMnemonic('W');
        helpMenu.setMnemonic('H');
        //create JMenuItems "undoJMenuItem" for file JMenu
        JMenuItem newJMenuItem = new JMenuItem("New");
        JMenuItem openJMenuItem = new JMenuItem("Open");
        JMenuItem saveJMenuItem = new JMenuItem("Save");
        JMenuItem asJMenuItem = new JMenuItem("Save As");
        JMenuItem exitJMenuItem = new JMenuItem("Exit");
        //set JmenuItems with setMnewmonic()
        newJMenuItem.setMnemonic('N');
        openJMenuItem.setMnemonic('O');
        saveJMenuItem.setMnemonic('S');
        asJMenuItem.setMnemonic('a');
        exitJMenuItem.setMnemonic('E');
        //add JmenuItems to view
        fileMenu.add(newJMenuItem);
        fileMenu.add(openJMenuItem);
        fileMenu.add(saveJMenuItem);
        fileMenu.add(asJMenuItem);
        fileMenu.add(exitJMenuItem);
        //create MenuItems for edit
        JMenuItem undoMenuItem=new JMenuItem("Undo");
        JMenuItem cutMenuItem=new JMenuItem("Cut");
        JMenuItem copyMenuItem=new JMenuItem("Copy");
        JMenuItem pasteMenuItem=new JMenuItem("Paste");
        JMenuItem specialMenuItem=new JMenuItem("Paste Special");
        JMenuItem hyperMenuItem=new JMenuItem("Paste As Hyperlink");
        JMenuItem deleteMenuItem=new JMenuItem("Delete");
        JMenuItem allMenuItem=new JMenuItem("Select All");
        JMenuItem findMenuItem=new JMenuItem("Find");
        JMenuItem replaceMenuItem=new JMenuItem("Replace");
        JMenuItem renameMenuItem=new JMenuItem("Rename");
        //set Mnemonic for edit JMenuItems
        undoMenuItem.setMnemonic('u');
        cutMenuItem.setMnemonic('t');
        copyMenuItem.setMnemonic('C');
        pasteMenuItem.setMnemonic('P');
        specialMenuItem.setMnemonic('s');
        hyperMenuItem.setMnemonic('H');
        deleteMenuItem.setMnemonic('D');
        allMenuItem.setMnemonic('S');
        findMenuItem.setMnemonic('F');
        replaceMenuItem.setMnemonic('p');
        renameMenuItem.setMnemonic('m');
        //add jmenuItems to edit JMenu
        editMenu.add(undoMenuItem);
        editMenu.add(cutMenuItem);
        editMenu.add(copyMenuItem);
        editMenu.add(pasteMenuItem);
        editMenu.addSeparator();
        editMenu.add(specialMenuItem);
        editMenu.add(hyperMenuItem);
        editMenu.add(deleteMenuItem);
        editMenu.addSeparator();
        editMenu.add(allMenuItem);
        editMenu.add(findMenuItem);
        editMenu.add(replaceMenuItem);
        editMenu.add(renameMenuItem);
        //create JMenuItems for view JMenu
        JMenuItem listMenuItem=new JMenuItem("List");
        JMenuItem detailsMenuItem=new JMenuItem("Details");
        //set JmenuItems with setMnewmonic()
        listMenuItem.setMnemonic('s');
        detailsMenuItem.setMnemonic('d');
        //add JmenuItems to view
        viewMenu.add(listMenuItem);
        viewMenu.add(detailsMenuItem);
        //add JMenuitems to insert JMenu
        //insertMenu.add(new ChromaticAction());
        //insertMenu.add(new NewKeyCardsWindowAction());
        insertMenu.add(new DataBaseWindowAction());
        //insertMenu.add(new NewFileWindowAction());
        //insertMenu.add(new OpenDialogWindowAction());
        //insertMenu.add(new SaveWindowAction());
        //insertMenu.add(new SaveAsDialogWindowAction());
        //insertMenu.addSeparator();
        //insertMenu.add(new ExitAction());
        //insertMenu.add(new QuizProgWindowAction());
        //create JMenuItems for ___JMenuItem to tools JMenu(___)
        JMenuItem spellingJMenuItem =new JMenuItem("Spelling");
        JMenuItem optionsJMenuItem =new JMenuItem("Options");
        //set ________JmenuItem with setMnewmonic()
        spellingJMenuItem.setMnemonic('e');
        optionsJMenuItem.setMnemonic('p');
        //add JmenuItems to ________
        toolsMenu.add(spellingJMenuItem);
        toolsMenu.add(optionsJMenuItem);
        //create JMenuItems for ________JMenuItem to _Window_JMenu(___)
        JMenuItem tileHJMenuItem=new JMenuItem("Tile Horizontally");
        JMenuItem tileVJMenuItem=new JMenuItem("Tile Vertically");
        JMenuItem cascadeJMenuItem=new JMenuItem("Cascade");
        //set ________JmenuItems with setMnewmonic()
        tileHJMenuItem.setMnemonic('H');
        tileVJMenuItem.setMnemonic('a');
        cascadeJMenuItem.setMnemonic('C');
        //add _________JmenuItem to view
        windowMenu.add(tileHJMenuItem);
        windowMenu.add(tileVJMenuItem);
        windowMenu.add(cascadeJMenuItem);
        //create JMenuItems for ________JMenuItem to _helpMenu_JMenu("__")
        JMenuItem contactJMenuItem=new JMenuItem("Contact");
        JMenuItem aboutJMenuItem=new JMenuItem("About Music Lessons");
        //set ________JmenuItems with setMnewmonic()
        contactJMenuItem.setMnemonic('C');
        aboutJMenuItem.setMnemonic('L');
        //add _________JmenuItem to view
        helpMenu.add(contactJMenuItem);
        helpMenu.add(aboutJMenuItem);
        //create and add to JMenuBarr
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(viewMenu);
        menuBar.add(insertMenu);
        menuBar.add(toolsMenu);
        menuBar.add(windowMenu);
        menuBar.add(helpMenu);
        setJMenuBar(menuBar);
        openJMenuItem.addActionListener(new java.awt.event.ActionListener(){
           public void actionPerformed(java.awt.event.ActionEvent evt){
                   openDialogActionPerformed(evt);
            }
        });
    }
   private void openDialogActionPerformed(java.awt.event.ActionEvent e){
        JFileChooser fc = new JFileChooser();
        
        //Handle open JMenuitem action.
        if (e.getSource() == openJMenuItem) {
            int returnVal = fc.showOpenDialog(xPanel);
            
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would open the file.
                log.append("Opening: " + file.getName() + "." + newline);
            } else {
                log.append("Open command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());
            /*
            //Handle save button action.
        } else if (e.getSource() == saveButton) {
            int returnVal = fc.showSaveDialog(FileChooserDemo.this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would save the file.
                log.append("Saving: " + file.getName() + "." + newline);
            } else {
                log.append("Save command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());
             */
        }
        
    }
     private void createQuizProgWindow() {
        JInternalFrame frame = new JInternalFrame("Quiz", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.add(quizProg.getContentPane());
        frame.setSize(780, 420);
        // move JInternalFrame to prevent it from obscuring others
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
//internal frame containing keycards
    private void createQuizWindow() {
        JInternalFrame frame = new JInternalFrame("Quiz", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
        WebBrowserPane browserPane = new WebBrowserPane();
        WebToolBar toolBar = new WebToolBar(browserPane);
        Container contentPane = frame.getContentPane();
        contentPane.add(toolBar, BorderLayout.NORTH);
        KeyFrame4 keyFrame4=new KeyFrame4();
        JScrollPane scrollPane = new JScrollPane(keyFrame4);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(780, 420);
        // move JInternalFrame to prevent it from obscuring others
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
    //creates a internal frame to manipulate database controls
    private void createDataBaseWindow() {
        JInternalFrame frame = new JInternalFrame("Database", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable 
        //class to add a standard JMenubar to calling internal frames
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
       FourComponentJPanel fourComponentJPanel = new ComponentTypes.FourComponentJPanel();
        
        GridLayout layout = new GridLayout(1,1,4,1);
        setLayout(layout);
        setTransferPanel(fourComponentJPanel.getJPanel1());
        frame.setLayout(getLayout());
        JScrollPane scrollPane = new JScrollPane(getTransferPanel());
        Container contentPane = frame.getContentPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(840, 420);
        // move JInternalFrame to prevent it from obscuring otherstransferPanel.add(scrollJPanelComponent);
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
//internalFrame containing tabbedpane
    private void createNewChromaticWindow() {
        JInternalFrame frame = new JInternalFrame("Chromatic", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
        WebBrowserPane browserPane = new WebBrowserPane();
        WebToolBar toolBar = new WebToolBar(browserPane);
        Container contentPane = frame.getContentPane();
        contentPane.add(toolBar, BorderLayout.NORTH);
        TPanel tPanel = new TPanel();
        JScrollPane scrollPane = new JScrollPane(tPanel);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(780, 420);
        // move JInternalFrame to prevent it from obscuring others
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
//window invoked by the database button _________? to look up
    private void createNewFileWindow() {
         JInternalFrame frame = new JInternalFrame("File", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable 
        //class to add a standard JMenubar to calling internal frames
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
        //FourComponentJPanel fourComponentJPanel = new FourComponentJPanel();
        GridLayout layout = new GridLayout(1,1,4,1);
        setLayout(layout);
        setTransferPanel(fourComponentJPanel.getJPanel1());
        frame.setLayout(getLayout());
        JScrollPane scrollPane = new JScrollPane(getTransferPanel());
        Container contentPane = frame.getContentPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(840, 420);
        // move JInternalFrame to prevent it from obscuring otherstransferPanel.add(scrollJPanelComponent);
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
     private void createSaveWindow() {
          JInternalFrame frame = new JInternalFrame("Save", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable 
        //class to add a standard JMenubar to calling internal frames
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
       // FourComponentJPanel fourComponentJPanel = new FourComponentJPanel();
        GridLayout layout = new GridLayout(1,1,4,1);
        setLayout(layout);
        setTransferPanel(fourComponentJPanel.getJPanel1());
        frame.setLayout(getLayout());
        JScrollPane scrollPane = new JScrollPane(getTransferPanel());
        Container contentPane = frame.getContentPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(840, 420);
        // move JInternalFrame to prevent it from obscuring otherstransferPanel.add(scrollJPanelComponent);
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
      private void createSaveAsDialogWindow() {
         JInternalFrame frame = new JInternalFrame("Save As", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable 
        //class to add a standard JMenubar to calling internal frames
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
       // FourComponentJPanel fourComponentJPanel = new FourComponentJPanel();
        GridLayout layout = new GridLayout(1,1,4,1);
        setLayout(layout);
        setTransferPanel(fourComponentJPanel.getJPanel1());
        frame.setLayout(getLayout());
        JScrollPane scrollPane = new JScrollPane(getTransferPanel());
        Container contentPane = frame.getContentPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(840, 420);
        // move JInternalFrame to prevent it from obscuring otherstransferPanel.add(scrollJPanelComponent);
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
    }
      private class NewKeyCardsWindowAction extends AbstractAction{
      public NewKeyCardsWindowAction() {
            putValue(Action.NAME, "Key Cards");
            putValue(Action.SHORT_DESCRIPTION, "Create New Key Card Browser Window");
            putValue(Action.MNEMONIC_KEY, new Integer('N'));
        }
        public void actionPerformed(ActionEvent event) {
            
            createNewKeyCardsWindow();
        }

        private void createNewKeyCardsWindow() {
             JInternalFrame frame = new JInternalFrame("Key Cards", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable
        
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
        
        WebBrowserPane browserPane = new WebBrowserPane();
        WebToolBar toolBar = new WebToolBar(browserPane);
        Container contentPane = frame.getContentPane();
        contentPane.add(toolBar, BorderLayout.NORTH);
        KeyFrame4 keyFrame4=new KeyFrame4();
        JScrollPane scrollPane = new JScrollPane(keyFrame4);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(780, 420);
        // move JInternalFrame to prevent it from obscuring others
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
        }
      }

    
//sets menuitem to create a internal fram that needs to contain internal frames
    private class DataBaseWindowAction extends AbstractAction {
       private DataBaseWindowAction() {
            putValue(Action.NAME, "Data Base");
            putValue(Action.SHORT_DESCRIPTION, "Create New Data Base Browser Window");
            putValue(Action.MNEMONIC_KEY, new Integer('L'));
        }
       public void actionPerformed(ActionEvent event) {
            
            createDataBaseWindow();
        }
    }
    private class QuizProgWindowAction extends AbstractAction {
       private QuizProgWindowAction() {
            putValue(Action.NAME, "Quiz Program");
            putValue(Action.SHORT_DESCRIPTION, "Create New Quiz Program Browser Window");
            putValue(Action.MNEMONIC_KEY, new Integer('Q'));
        }
       public void actionPerformed(ActionEvent event) {
            
            createQuizProgWindow();
        }
    }
//class to create menuitem "exit" under file
    private class ExitAction extends AbstractAction {
       private ExitAction() {
            // set name, description and mnemonic key
            putValue(Action.NAME, "Exit");
            putValue(Action.SHORT_DESCRIPTION, "Exit Application");
            putValue(Action.MNEMONIC_KEY, new Integer('x'));
        }
        
       public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    }
    private class NewFileWindowAction extends AbstractAction {
       private NewFileWindowAction() {
            // set name, description and mnemonic key
            putValue(Action.NAME, "New");
            putValue(Action.SHORT_DESCRIPTION, "New File");
            putValue(Action.MNEMONIC_KEY, new Integer('N'));
        }
        
       public void actionPerformed(ActionEvent event) {
            createNewFileWindow();
        }
    }
    private class OpenDialogWindowAction extends AbstractAction {
       private OpenDialogWindowAction() {
            // set name, description and mnemonic key
            putValue(Action.NAME, "Open");
            putValue(Action.SHORT_DESCRIPTION, "Open Application");
            putValue(Action.MNEMONIC_KEY, new Integer('O'));
        }
        
       public void actionPerformed(ActionEvent event) {
            createOpenDialogWindow();
        }
        
        private void createOpenDialogWindow() {
            
            JInternalFrame frame = new JInternalFrame("Open", // title
                true, // resizable
                true, // closable
                true, // maximizable
                true); // iconifiable 
        //class to add a standard JMenubar to calling internal frames
        StandardJMenu standardJMenu=new StandardJMenu();
        frame.setJMenuBar(standardJMenu.createJMenu());
        //FourComponentJPanel fourComponentJPanel = new FourComponentJPanel();
        GridLayout layout = new GridLayout(1,1,4,1);
        setLayout(layout);
        setTransferPanel(fourComponentJPanel.getJPanel1());
        frame.setLayout(getLayout());
        JScrollPane scrollPane = new JScrollPane(getTransferPanel());
        Container contentPane = frame.getContentPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(840, 420);
        // move JInternalFrame to prevent it from obscuring otherstransferPanel.add(scrollJPanelComponent);
        int offset = 30 * desktopPane.getAllFrames().length;
        frame.setLocation(offset, offset);
        desktopPane.add(frame);
        frame.setVisible(true);
        }
    }
// SaveWindowAction();
    private class SaveWindowAction extends AbstractAction {
       private SaveWindowAction() {
            // set name, description and mnemonic key
            putValue(Action.NAME, "Save");
            putValue(Action.SHORT_DESCRIPTION, "Save file");
            putValue(Action.MNEMONIC_KEY, new Integer('S'));
        }
        
       public void actionPerformed(ActionEvent event) {
            createSaveWindow();
        }
    }
//SaveAsDialogWindowAction()
    private class SaveAsDialogWindowAction extends AbstractAction {
       private SaveAsDialogWindowAction() {
            // set name, description and mnemonic key
            putValue(Action.NAME, "Save_As");
            putValue(Action.SHORT_DESCRIPTION, "Save File As");
            putValue(Action.MNEMONIC_KEY, new Integer('A'));
        }
        
       public void actionPerformed(ActionEvent event) {
            createSaveAsDialogWindow();
        }
    }
//class to create menuitem "chromatic" that creates chromatic card browser window
    private class ChromaticAction extends AbstractAction {
       private ChromaticAction() {
            putValue(Action.NAME, "Chromatic");
            putValue(Action.SHORT_DESCRIPTION, "Create New Chromatic Card Browser Window");
            putValue(Action.MNEMONIC_KEY, new Integer('C'));
        }
       public void actionPerformed(ActionEvent event) {
            
            createNewChromaticWindow();
        }
    }
  public static void main(String args[]) {
        KeyBrowser browser = new KeyBrowser();
        browser.setDefaultCloseOperation(EXIT_ON_CLOSE);
        browser.setSize(640, 480);
        browser.setVisible(true);
    }
   public void actionPerformed(ActionEvent e) {
    }
    class WebToolBar extends JToolBar implements HyperlinkListener {
        
        private WebBrowserPane webBrowserPane;
        
        private JButton backButton;
        
        private JButton forwardButton;
        
        private JTextField urlTextField;
        
       private WebToolBar(WebBrowserPane browser) {
            super("Web Navigation");
            webBrowserPane = browser;
            webBrowserPane.addHyperlinkListener(this);
            urlTextField = new JTextField(25);
            urlTextField.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent event) {
                    try {
                        URL url = new URL(urlTextField.getText());
                        webBrowserPane.goToURL(url);
                    }catch (MalformedURLException urlException) {
                        urlException.printStackTrace();
                    }
                }
            });
            backButton = new JButton("back");
            
            backButton.addActionListener(new ActionListener() {
                
               public void actionPerformed(ActionEvent event) {
                    URL url = webBrowserPane.back();
                    urlTextField.setText(url.toString());
                }
            });
            
            forwardButton = new JButton("forward");
            
            forwardButton.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent event) {
                    URL url = webBrowserPane.forward();
                    urlTextField.setText(url.toString());
                }
            });
            add(backButton);
            add(forwardButton);
            add(urlTextField);
        }
        
       public void hyperlinkUpdate(HyperlinkEvent event) {
            if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                URL url = event.getURL();
                
                webBrowserPane.goToURL(url);
                urlTextField.setText(url.toString());
            }
        }
    }
    class WebBrowserPane extends JEditorPane {
        private List history = new ArrayList();
        private int historyIndex;
       private WebBrowserPane() {
            setEditable(false);
        }
        
       private void goToURL(URL url) {
            displayPage(url);
            history.add(url);
            historyIndex = history.size() - 1;
        }
       private URL forward() {
            historyIndex++;
            if (historyIndex >= history.size())
                historyIndex = history.size() - 1;
            
            URL url = (URL) history.get(historyIndex);
            displayPage(url);
            
            return url;
        }
        
       private URL back() {
            historyIndex--;
            if (historyIndex < 0)
                historyIndex = 0;
            URL url = (URL) history.get(historyIndex);
            displayPage(url);
            return url;
        }
        private void displayPage(URL pageURL) {
            try {
                setPage(pageURL);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }
     void setLayout(GridLayout layout){
        this.layout=layout;
    }
     //return the layout
    public GridLayout getLayout(){
        return layout;
    }
    //set panel configuration
      void setTransferPanel(JPanel transferPanel){
        this.transferPanel=transferPanel;
    }
      //return panel configuration
    JPanel getTransferPanel(){
        return transferPanel;
    }

   
}

/////////////////////////////////////////////////////////////////////////////////

/*
 * ComponentTypes.java
 *
 * Created on December 27, 2007, 8:13 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package keys_desk;

import java.awt.Container;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.GroupLayout;
import javax.swing.JPanel;
/**
 *
 * @author James Howerton
 */
public class ComponentTypes extends javax.swing.JPanel{
    
    /** Creates a new instance of ComponentTypes */
    public ComponentTypes() {
    }

    public abstract class FourComponentJPanel extends javax.swing.JComponent {
         /**
     * Creates new form FourComponentJPanel
     */
    public FourComponentJPanel() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel6 = new javax.swing.JPanel();
        jPanel7 = new javax.swing.JPanel();
        jPanel8 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jPanel9 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jPanel10 = new javax.swing.JPanel();
        jButton4 = new javax.swing.JButton();
        jPanel11 = new javax.swing.JPanel();
        jButton5 = new javax.swing.JButton();
        jPanel12 = new javax.swing.JPanel();
        jButton6 = new javax.swing.JButton();
        jPanel13 = new javax.swing.JPanel();
        jButton7 = new javax.swing.JButton();
        jPanel14 = new javax.swing.JPanel();
        jButton8 = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jPanel15 = new javax.swing.JPanel();
        jPanel16 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jPanel4 = new javax.swing.JPanel();
        jPanel17 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jPanel5 = new javax.swing.JPanel();
        jPanel18 = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jPanel19 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jPanel1.setLayout(new java.awt.GridLayout(1, 4, 1, 1));

        jPanel1.setBorder(new javax.swing.border.MatteBorder(null));
        jPanel2.setLayout(new java.awt.GridLayout(1, 1, 1, 1));

        jPanel2.setBorder(new javax.swing.border.MatteBorder(null));
        jPanel7.setLayout(new java.awt.GridLayout(9, 1, 1, 1));

        jPanel7.setBorder(new javax.swing.border.MatteBorder(null));
        jPanel8.setBorder(new javax.swing.border.MatteBorder(null));
        jButton1.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel8);

        jPanel9.setBorder(new javax.swing.border.MatteBorder(null));
        jButton3.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
        jPanel9.setLayout(jPanel9Layout);
        jPanel9Layout.setHorizontalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jButton3)
        );
        jPanel9Layout.setVerticalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jButton3)
        );
        jPanel7.add(jPanel9);

        jPanel10.setBorder(new javax.swing.border.MatteBorder(null));
        jButton4.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
        jPanel10.setLayout(jPanel10Layout);
        jPanel10Layout.setHorizontalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addComponent(jButton4)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel10Layout.setVerticalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addComponent(jButton4)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel10);

        jPanel11.setBorder(new javax.swing.border.MatteBorder(null));
        jButton5.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
        jPanel11.setLayout(jPanel11Layout);
        jPanel11Layout.setHorizontalGroup(
            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel11Layout.createSequentialGroup()
                .addComponent(jButton5)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel11Layout.setVerticalGroup(
            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel11Layout.createSequentialGroup()
                .addComponent(jButton5)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel11);

        jPanel12.setBorder(new javax.swing.border.MatteBorder(null));
        jButton6.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
        jPanel12.setLayout(jPanel12Layout);
        jPanel12Layout.setHorizontalGroup(
            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel12Layout.createSequentialGroup()
                .addComponent(jButton6)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel12Layout.setVerticalGroup(
            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel12Layout.createSequentialGroup()
                .addComponent(jButton6)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel12);

        jPanel13.setBorder(new javax.swing.border.MatteBorder(null));
        jButton7.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
        jPanel13.setLayout(jPanel13Layout);
        jPanel13Layout.setHorizontalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addComponent(jButton7)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel13Layout.setVerticalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addComponent(jButton7)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel13);

        jPanel14.setBorder(new javax.swing.border.MatteBorder(null));
        jButton8.setText("SaveAsJPanel");

        javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
        jPanel14.setLayout(jPanel14Layout);
        jPanel14Layout.setHorizontalGroup(
            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel14Layout.createSequentialGroup()
                .addComponent(jButton8)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel14Layout.setVerticalGroup(
            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel14Layout.createSequentialGroup()
                .addComponent(jButton8)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7.add(jPanel14);

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(62, Short.MAX_VALUE))
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel2.add(jPanel6);

        jPanel1.add(jPanel2);

        jPanel3.setLayout(new java.awt.GridLayout(1, 1, 1, 1));

        jPanel3.setBorder(new javax.swing.border.MatteBorder(null));
        jList1.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jList1ValueChanged(evt);
            }
        });

        jScrollPane1.setViewportView(jList1);

        javax.swing.GroupLayout jPanel16Layout = new javax.swing.GroupLayout(jPanel16);
        jPanel16.setLayout(jPanel16Layout);
        jPanel16Layout.setHorizontalGroup(
            jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel16Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel16Layout.setVerticalGroup(
            jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel16Layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15);
        jPanel15.setLayout(jPanel15Layout);
        jPanel15Layout.setHorizontalGroup(
            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel15Layout.createSequentialGroup()
                .addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(20, Short.MAX_VALUE))
        );
        jPanel15Layout.setVerticalGroup(
            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel15Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel16, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel3.add(jPanel15);

        jPanel1.add(jPanel3);

        jPanel4.setLayout(new java.awt.GridLayout(1, 1, 1, 1));

        jPanel4.setBorder(new javax.swing.border.MatteBorder(null));
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane2.setViewportView(jTextArea1);

        javax.swing.GroupLayout jPanel17Layout = new javax.swing.GroupLayout(jPanel17);
        jPanel17.setLayout(jPanel17Layout);
        jPanel17Layout.setHorizontalGroup(
            jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel17Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel17Layout.setVerticalGroup(
            jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel17Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel4.add(jPanel17);

        jPanel1.add(jPanel4);

        jPanel5.setLayout(new java.awt.GridLayout(1, 1, 1, 1));

        jPanel5.setBorder(new javax.swing.border.MatteBorder(null));
        javax.swing.GroupLayout jPanel19Layout = new javax.swing.GroupLayout(jPanel19);
        jPanel19.setLayout(jPanel19Layout);
        jPanel19Layout.setHorizontalGroup(
            jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 398, Short.MAX_VALUE)
        );
        jPanel19Layout.setVerticalGroup(
            jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 386, Short.MAX_VALUE)
        );
        jScrollPane3.setViewportView(jPanel19);

        javax.swing.GroupLayout jPanel18Layout = new javax.swing.GroupLayout(jPanel18);
        jPanel18.setLayout(jPanel18Layout);
        jPanel18Layout.setHorizontalGroup(
            jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel18Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel18Layout.setVerticalGroup(
            jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel18Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel5.add(jPanel18);

        jPanel1.add(jPanel5);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 753, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {                                    
// TODO add your handling code here:
    }                                   
    
    /**
     * @param args the command line arguments
     */
    
   
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;

    public JPanel getJPanel1() {
        return jPanel1;
    }

    public void setJPanel1(JPanel jPanel1) {
        this.jPanel1 = jPanel1;
    }

        private void setDefaultCloseOperation(int EXIT_ON_CLOSE) {
            throw new UnsupportedOperationException("Not yet implemented");
        }

        private Container getContentPane() {
            return null;
        }

        private void pack() {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JList jList1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel10;
    private javax.swing.JPanel jPanel11;
    private javax.swing.JPanel jPanel12;
    private javax.swing.JPanel jPanel13;
    private javax.swing.JPanel jPanel14;
    private javax.swing.JPanel jPanel15;
    private javax.swing.JPanel jPanel16;
    private javax.swing.JPanel jPanel17;
    private javax.swing.JPanel jPanel18;
    private javax.swing.JPanel jPanel19;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
    }




    
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.