Would you like to make this site your homepage? It's fast and easy... 
    
     
     Yes, Please make this my home page! 
     
 
     
     
    
     
Tips Organiser
Project - Tips Organiser
The purpose of this project was 
to organise a whole bunch of tips/snippets obtained from everywhere. Ever looked 
at a newsgroup, or the Sun Forum etc, and someone's posted a neat way of doing 
something, so you print it out to keep and read later. Ever bookmarked an 
interesting article in a magazine, or an interesting bit of code (not full 
working code)  in a book, only to find you have hundreds of these tips, or 
bookmarks sticking out, so you can't find 
anything. Well, not without a great deal of effort.
This project is very similar to the Code Samples Organiser, particularly 
entering/retrieving data, although this is a bit more complex.
           
           
              
             
           For example you may have 
printed out a handy tip using FileWriter. You'd enter FileWriter into the textfield, 
then click the button with T0001 displayed. T0001 will appear in the textarea and you can 
add any additional comments, before clicking "Add". You'd then write on the top of the tip document T0001, 
then file the document (T0002 would then go on top of T0001, T003 on top 
of T002 etc). After adding 
the T0001 to the textarea, the button label changes to T0002.
The only way to record the tip numbers in the "TipsIndex" is (a) have data in 
the textfield (for a new entry), then click the "T" button or (b) click on 
an item in the JList, so there's data in the textarea (this way you can have 
multiple tips in a single subject), then click the "T" button . This is 
the only way to record the "T" number and to increment it.
For  books and article tips/snippets, just make a reference to the 
book/magazine and page number. No need to add a "T" number. One idea could be to 
add an entry called "Books" then list each book in your library and give it a 
short code
 e.g.
"PJP" - "Professional Java Programming - Brett 
Spell"
"JPR" - "Java Programmer's Reference - Grant Palmer"
so, a listing for FileWriter may include JPR p342.
The first character of any data in the textfield will automatically change to 
uppercase - required for sorting in the JList.
Change the language headers to whatever suits - the 
directories will automatically be created.. "TipsIndex" is the only 
hard-coded header, so 
it is the only one necessary to be retained.
  
         
import javax.swing.*;
import 
javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import 
java.io.*;
import java.util.*;
 
class TipsOrganiser extends JFrame implements 
ActionListener, 
ItemListener,
                                   
KeyListener, ListSelectionListener
{
  String languages[] = 
{"Java","VB","VBscript","C","C++","Excel",
                        
"Outlook","Windows","misc","TipsIndex"};
  ArrayList headers[] = new 
ArrayList[languages.length];
  JRadioButton rb[] = new 
JRadioButton[languages.length];
  DefaultListModel listModel = new 
DefaultListModel();
  String nextTipID = "T0001";
  JList list = 
new JList(listModel);
  JTextField tf = new JTextField(18);
  
JButton addBtn = new JButton(" Add ");
  JButton clrBtn = new 
JButton("Clr");
  JButton tipBtn;
  JTextArea ta = new 
JTextArea(23,30);
  JScrollPane sp1 = new JScrollPane(list);
  JScrollPane sp2 = 
   new JScrollPane(ta);
  boolean unSaved = 
false;
  boolean fromRadioButtonChange = false;
  boolean 
fromClearBtn = true;
  boolean indexOnly = false;
  String 
currentDirectory;
  int currDirElement = 0;
  String 
currentListText = "";
  int currentListItem = 0;
  int 
nextTipNum = 1;
 
  public TipsOrganiser()
  
{
    super("Tips Organiser");
    
setSize(650,525);
    
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container 
window = getContentPane();
    window.setLayout(new 
BorderLayout());
    JPanel top = new JPanel(new 
FlowLayout());
    ButtonGroup bg = new 
ButtonGroup();
    for(int i = 0; i < rb.length; 
i++)
    {
      rb[i] = new 
JRadioButton(languages[i]);
      
rb[i].addItemListener(this);
      
bg.add(rb[i]);
      
top.add(rb[i]);
      headers[i] = new 
ArrayList();
    }
    
getArrayListHeadersInfo();
    
getSetNextTipID();
    
list.addListSelectionListener(this);
    
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    
sp1.setPreferredSize(new Dimension(255,450));
    
addBtn.addActionListener(this);
    
clrBtn.addActionListener(this);
    tipBtn = new 
JButton(nextTipID);
    
tipBtn.addActionListener(this);
    JPanel mid = new 
JPanel();
    JPanel bottom = new JPanel(new 
FlowLayout());
    
ta.addKeyListener(this);
    JSplitPane split = new 
JSplitPane(JSplitPane.HORIZONTAL_SPLIT,sp1,sp2);
    
split.setDividerLocation(200);
    split.setPreferredSize(new 
Dimension(650,400));
    
split.resetToPreferredSizes();
    
mid.add(split);
    bottom.add(tf);
    
bottom.add(addBtn);
    
bottom.add(clrBtn);
    
bottom.add(tipBtn);
    
window.add(top,BorderLayout.NORTH);
    
window.add(mid,BorderLayout.CENTER);
    
window.add(bottom,BorderLayout.SOUTH);
    
setLocation(200,100);
    
setResizable(false);
    
rb[0].setSelected(true);
    
setVisible(true);
    
checkDirectories();
    fromRadioButtonChange = 
false;
  }
 
  private void 
checkDirectories()                   
//CHECK DIRECTORIES EXIST
  {
    for(int i = 0; i 
< languages.length; i++)
    
{
      File dir = new 
File(languages[i]);
      if(!dir.exists()) 
dir.mkdir();
    }
  }
 
  private void 
getArrayListHeadersInfo()            
//LOAD HEADERS INFO TO ARRAYLISTS
  {
    for(int i = 
0; i < headers.length; i++)
    
{
      try
      
{
        File indexFile =       new 
File(languages[i]+".txt");
        
if(indexFile.exists())
        
{
          BufferedReader br = 
new BufferedReader(new 
FileReader(languages[i]+".txt"));
          
String line = "";
          
while ((line = br.readLine()) != null)
  
       {
    
       
headers[i].add(line);
          
}
          
br.close();
        
}
      }
      
catch(FileNotFoundException fnfe)
      
{
        
JOptionPane.showMessageDialog(null,""+languages[i]+" file not 
found");
      }
      
catch(IOException ioe)
      
{
        
JOptionPane.showMessageDialog(null,"Unexpected error - 
terminating");
        
System.exit(0);
      }
    
}
  }
 
  private void 
getSetNextTipID()                 
//READ IN, SET NEXT TIP ID
  {
    
try
    {
      File 
nextTipNumFile = new File("NextTipNum.txt");
      
if(nextTipNumFile.exists())
      
{
        BufferedReader br = new 
BufferedReader(new 
FileReader("NextTipNum.txt"));
        
nextTipNum = 
Integer.parseInt(br.readLine());
        
br.close();
        String nextNum = 
"000"+nextTipNum;
        nextTipID = 
"T"+nextNum.substring(nextNum.length()-4);
      
}
    }
    catch(FileNotFoundException 
fnfe)
    {
      
JOptionPane.showMessageDialog(null,"NextTipNum.txt - file not 
found");
 
    }
    
catch(IOException ioe)
    {
      
JOptionPane.showMessageDialog(null,"Unexpected error - 
terminating");
      
System.exit(0);
    }
    catch(Exception 
e)
    {
      
JOptionPane.showMessageDialog(null,"error parsing next tip number from 
file");
    }
  }
 
  private void addHeadersToList(int 
num)            //ADD 
SELECTED HEADER INFO TO JLIST
  {
    
listModel.clear();
    
Collections.sort(headers[num]);
    for(int i = 0; i < 
headers[num].size(); i++)
    
{
      
listModel.addElement(headers[num].get(i));
    }
  
}
 
  public void valueChanged(ListSelectionEvent 
lse)   //JLIST_CLICK()
  {
    
if(!fromRadioButtonChange && !indexOnly)
    
{
      if(unSaved) 
checkUnsaved();
      if(list.getSelectedValue() != 
null){
        currentListItem = 
list.getSelectedIndex();
        
currentListText = 
list.getSelectedValue().toString();
        
try
        
{
          BufferedReader br = 
new BufferedReader(new 
FileReader(
                       
currentDirectory+"\\"+list.getSelectedValue()+".txt"));
          
String line = "";
          
String fileData = "";
          
while ((line = br.readLine()) != null)
    
     {
      
     fileData += line + 
"\n";
          
}
          
br.close();
          
ta.setText(fileData);
        
}
        catch(IOException 
ioe)
        
{
          
JOptionPane.showMessageDialog(null,"Unexpected error - 
terminating");
          
System.exit(0);
        
}
      }
    
}
    fromRadioButtonChange = false;
    
ta.setCaretPosition(0);
  } 
 
  public void itemStateChanged(ItemEvent 
ie)     //CHANGE SELECTED "LANGUAGE"
  
{
    if(unSaved) checkUnsaved();
    
indexOnly = false;
    for(int i = 0; i < rb.length; 
i++)
    {
      
if(rb[i].isSelected())
      
{
        
addHeadersToList(i);
        
currentDirectory = languages[i];
        currDirElement = 
  i;
        
fromRadioButtonChange = true;
        
clearText();
        
break;
      }
    
}
    if(currentDirectory.equals("TipsIndex")) indexOnly = 
true;
  }
 
  private void 
clearText()                      
//CLEAR TEXT FIELD/AREA
  {
    if(unSaved) 
checkUnsaved();
    fromClearBtn = true;
    
ta.setText("");
    tf.setText("");
    
addBtn.setText(" Add ");
    
list.clearSelection();
    fromClearBtn = false;
  
}
 
  public void actionPerformed(ActionEvent 
ae)     //JBUTTON_CLICK()
  {
    
if(ae.getSource() == clrBtn) clearText();
    else 
if(ae.getSource() == tipBtn) saveTipIDs();
    
else
    {
      
if(addBtn.getText().equals(" Add "))
      
{
        
if(!tf.getText().equals(""))
        
{
          
tf.setText(tf.getText().substring(0,1).toUpperCase()+tf.getText().substring(1));
          
if(recordExists(tf.getText()))
          
{
            
JOptionPane.showMessageDialog(null,"Record already exists, nothing 
added");
            
return;
          
}
          int save = 
0;
          
if(ta.getText().equals(""))
          
{
            save = 
JOptionPane.showConfirmDialog(null,"File data empty. 
Continue?");
          
}
          if(save == 
0)
          
{
            
saveFile(currentDirectory+".txt",true);
            
saveFile(currentDirectory+"\\"+ 
tf.getText()+".txt",false);
            
list.setSelectedValue(tf.getText(),true);
            
list.ensureIndexIsVisible(list.getSelectedIndex());
            
tf.setText("");
          
}
        
}
        
else
        
{
          
JOptionPane.showMessageDialog(null,"Text field empty - unable to 
add");
        
}
      }
      else  //button text = 
    "Save"
      
{
        int save = 
0;
        
if(ta.getText().equals(""))
        
{
          save = 
JOptionPane.showConfirmDialog(null,"File data empty. 
Continue?");
        
}
        if(save == 
0)
        
{
          
saveFile(currentDirectory+"\\"+ 
list.getSelectedValue()+".txt",false);
        
}
      }
    }
  
}
 
  private boolean recordExists(String 
str)       //CHECK IF RECORD EXISTS
  
{
    for(int i = 0; i < headers[currDirElement].size(); 
i++)
    {
      
if(headers[currDirElement].get(i).toString().toLowerCase().equals(str.toLowerCase()))
      
{
        return 
true;
      }
    
}
    return false;
  }
 
  private void 
checkUnsaved()                     
//CHECK IF CHANGED DATA IS TO BE SAVED
  {
    int yesNo =  
  JOptionPane.showConfirmDialog(null, "Save changes to 
"+
                    
currentListText+ " ?");
    if(yesNo == 
0)
    {
      
saveFile(currentDirectory+"\\"+currentListText+".txt",false);
    
}
    unSaved = false;
    addBtn.setText(" 
Add ");
  } 
 
  private void 
saveTipIDs()                      
//SAVE TIP INDEX AND IDs
  {
    String saveData = 
"";
    try
    
{
      
if(!ta.getText().equals(""))
      
{
        saveData =     nextTipID+" | 
"+currentDirectory+" | 
"+list.getSelectedValue();
        
ta.setText(ta.getText()+nextTipID+" ");
      
}
      else 
if(!tf.getText().equals(""))
      
{
        saveData =     nextTipID+" | 
"+currentDirectory+" | 
"+tf.getText();
        
ta.setText(nextTipID+" ");
      
}
      else
      
{
        
JOptionPane.showMessageDialog(null,"Both Textfield and TextArea empty, new tip 
unsuccessful");
        
return;
      }
 
      for(int i = 0; i 
< languages.length; i++)
      
{
        
if(languages[i].equals("TipsIndex"))
        
{
          
headers[i].add(saveData);
          
break;
        
}
      }
      
FileWriter fw = new 
FileWriter("TipsIndex.txt",true);
      
fw.write(saveData+"\r\n");
      
fw.close();
 
      
nextTipNum++;
      String nextNum = 
"000"+nextTipNum;
      nextTipID = 
"T"+nextNum.substring(nextNum.length()-4);
 
      fw = new 
FileWriter("NextTipNum.txt");
      
fw.write(""+nextTipNum);
      
fw.close();
      
tipBtn.setText(nextTipID);
    }
    
catch(IOException ioe)
    {
      
int yesNo = 
JOptionPane.showConfirmDialog(null,
               
"Error writing to Tip/ID files\nContinue?");
      
if(yesNo != 0) System.exit(0);
    }
  }
 
  private void saveFile(String filePath, 
boolean appendFlag)    //SAVE FILE
  
{
    try
    
{
      FileWriter fw = new 
FileWriter(filePath,appendFlag);
      
if(appendFlag) //adding a header detail
      
{
        fw.write(tf.getText() + 
"\r\n");
        for(int i = 0; i < 
languages.length; i++)
        
{
          
if(currentDirectory.equals(languages[i]))
          
{
            
headers[i].add(tf.getText());
            
addHeadersToList(i);
            
break;
          
}
        
}
      }
      
else  //adding data to a header file
      
{
        
fw.write(ta.getText().replaceAll("\n","\r\n"));
      
}
      
fw.close();
      unSaved = 
false;
    }
    catch(IOException 
ioe)
    {
      int yesNo = 
JOptionPane.showConfirmDialog(null,
               
"Error writing to "+ filePath+"\nContinue?");
      
if(yesNo != 0) System.exit(0);
    }
  }
 
  public void keyPressed(KeyEvent 
ke)                 
//UNSAVED
  {
    if(!fromClearBtn && 
tf.getText().equals("") && list.getSelectedIndex() >= 
0)
    {
      unSaved = 
true;
      
addBtn.setText("Save");
    }
  }
 
  public void keyReleased(KeyEvent 
ke){};
  public void keyTyped(KeyEvent ke){};
  public static 
void main(String args[]) {new TipsOrganiser();}
}
back   
top   
main page   
vb snippets page      
java snippets page     
vbscript snippets page   
email   
Page last modified