Would you like to make this site your homepage? It's fast and easy...
Yes, Please make this my home page!
Code Samples Organiser
Project - Code Samples Organiser
The purpose of this project was to create an index of
keywords, phrases etc, based on my own snippets of sample code.
For example (probably from a newsgroup) the first time I came across
a working example of FileWriter - I copied the code, retaining the class name
"Assignment2", then, later, when I wanted to use/copy the FileWriter code
into a project, I couldn't recall where the sample code was. Not a big deal,
I just grabbed a couple of books and found the info I needed, but it would have
been far simpler to go straight to Assignment2 for the info.
There are two sections to this program (determined by the radio
buttons "Samples" and "Index").
1) Samples - to add a new listing, enter the filename into
the textfield, then enter the code into the textarea and click "Add". To view
what code is in a filename, just click on the filename in the JList and the code
will be displayed in the textarea. If changes are made to the details in the
textarea, "Add" will change to "Save", and there's a bit of error handling if
you forget to save.
2) Indexes - this is the important part - for every sample
code added to "Samples", dissect the code and add the kewords to the
index. For example, I might add a listing to the index "FileWriter", and in the
textarea "Assignment2" as the sample code filename containing a working example.
If I then create a sample code file called FileReadWrite, I'd add
FileReadWrite to the sample code section, change to indexes section, then
click on FileWriter and add FileReadWrite underneath Assignment2.
Also any import statements required for the keyword can be noted e.g. click
on the index for FileWriter - "import java.io.*;" might be displayed in the
textarea. Note: I would also have created, or added to, a FileReader index
listing "FileReadWrite".
So, using the previous example, if I wanted to find a working
example of FileWriter, I'd go to the index, click on FileWriter and see at least
one code listing of "Assignment2", then click the "samples" radio button, locate
and click on Assignment2 in the JList, and the working example of a FileWriter
would be in the textarea.
The first character of any data in the textfield will
automatically change to uppercase - required for sorting in the JList.
At this point there is no "delete" functionality.
import javax.swing.*;
import
javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import
java.io.*;
import java.util.*;
class CodeSamplesOrganiser extends JFrame
implements ActionListener,
ItemListener,
KeyListener, ListSelectionListener
{
ArrayList indexes = new
ArrayList();
ArrayList samples = new ArrayList();
JRadioButton rbIndex = new JRadioButton("Index");
JRadioButton
rbSample = new JRadioButton("Samples");
DefaultListModel listModel =
new DefaultListModel();
JList list = new JList(listModel);
JTextField tf = new JTextField(18);
JButton addBtn = new JButton(" Add
");
JButton clrBtn = new JButton("Clr");
JTextArea ta = new
JTextArea(23,30);
JScrollPane sp1 = new JScrollPane(list);
JScrollPane sp2 = new JScrollPane(ta);
boolean unSaved =
false;
boolean fromRadioButtonChange = false;
String
currentDirectory;
String currentListText = "";
int
currentListItem = 0;
public CodeSamplesOrganiser()
{
super("Code Samples Organiser");
getIndexSampleInfo();
setSize(650,525);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container
window = getContentPane();
window.setLayout(new
BorderLayout());
rbIndex.addItemListener(this);
rbSample.addItemListener(this);
ButtonGroup bg = new
ButtonGroup();
bg.add(rbIndex);
bg.add(rbSample);
list.addListSelectionListener(this);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
sp1.setPreferredSize(new Dimension(255,450));
addBtn.addActionListener(this);
clrBtn.addActionListener(this);
JPanel top = 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,450));
split.resetToPreferredSizes();
top.add(split);
bottom.add(rbSample);
bottom.add(rbIndex);
JLabel lbl = new
JLabel("
");
bottom.add(lbl);
bottom.add(tf);
bottom.add(addBtn);
bottom.add(clrBtn);
window.add(top,BorderLayout.NORTH);
window.add(bottom,BorderLayout.SOUTH);
setLocation(200,100);
setResizable(false);
rbSample.setSelected(true);
setVisible(true);
File indexDir = new
File("Indexes");
if(!indexDir.exists())
indexDir.mkdir();
File samplesDir = new
File("Samples");
if(!samplesDir.exists())
samplesDir.mkdir();
fromRadioButtonChange =
false;
}
private void
getIndexSampleInfo() //load index and sample code 'headers'
into arraylist
{
try
{
File indexFile = new
File("Indexes.txt");
if(indexFile.exists())
{
BufferedReader br = new
BufferedReader(new
FileReader("Indexes.txt"));
String line =
"";
while ((line =
br.readLine()) != null)
{
indexes.add(line);
}
br.close();
}
}
catch(FileNotFoundException fnfe)
{
JOptionPane.showMessageDialog(null,"Indexes
file not found");
}
catch(IOException ioe)
{
JOptionPane.showMessageDialog(null,"Unexpected error -
terminating");
System.exit(0);
}
try
{
File samplesFile = new
File("Samples.txt");
if(samplesFile.exists())
{
BufferedReader br = new
BufferedReader(new
FileReader("Samples.txt"));
String line =
"";
while ((line =
br.readLine()) != null)
{
samples.add(line);
}
br.close();
}
}
catch(FileNotFoundException fnfe)
{
JOptionPane.showMessageDialog(null,"Samples
file not found");
}
catch(IOException ioe)
{
JOptionPane.showMessageDialog(null,"Unexpected error -
terminating");
System.exit(0);
}
}
private void
addIndexesToList()
//add index 'headers' to JList
{
listModel.clear();
Collections.sort(indexes);
for(int i = 0; i <
indexes.size(); i++)
{
listModel.addElement(indexes.get(i));
}
}
private void
addSamplesToList()
//add sample code 'headers' to JList
{
listModel.clear();
Collections.sort(samples);
for(int i = 0; i <
samples.size(); i++)
{
listModel.addElement(samples.get(i));
}
}
public void valueChanged(ListSelectionEvent
lse)
//JLIST_CLICK()
{
if(!fromRadioButtonChange)
{
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) //JRADIOBUTTON_CHANGE()
{
if(unSaved) checkUnsaved();
if(rbIndex.isSelected())
{
addIndexesToList();
currentDirectory =
"Indexes";
}
else
if(rbSample.isSelected())
{
addSamplesToList();
currentDirectory =
"Samples";
}
fromRadioButtonChange =
true;
clearText();
}
private void
clearText()
//CLEAR TEXT
{
if(unSaved)
checkUnsaved();
ta.setText("");
tf.setText("");
addBtn.setText(" Add
");
list.clearSelection();
}
public void actionPerformed(ActionEvent
ae)
//JBUTTON_CLICK()
{
if(ae.getSource() == clrBtn)
clearText();
else
{
if(addBtn.getText().equals(" Add
"))
{
if(!tf.getText().equals(""))
{
tf.setText(tf.getText().substring(0,1).toUpperCase()+tf.getText().substring(1));
if(currentDirectory.equals("Indexes"))
{
if(recordExists(indexes,tf.getText()))
{
JOptionPane.showMessageDialog(null,"Record already exists, nothing
added");
return;
}
}
else
if(recordExists(samples,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);
}
}
unSaved
= false;
addBtn.setText(" Add
");
}
}
private boolean recordExists(ArrayList al,
String str)
{
for(int i = 0; i < al.size();
i++)
{
if(al.get(i).toString().toLowerCase().equals(str.toLowerCase())) return
true;
}
return false;
}
private void
checkUnsaved()
//CHECK TO SAVE UNSAVED DATA
{
int yesNo =
JOptionPane.showConfirmDialog(null, "Save changes to
"+
currentListText+ " ?");
if(yesNo ==
0)
{
saveFile(currentDirectory+"\\"+currentListText+".txt",false);
}
unSaved = false;
addBtn.setText("
Add ");
}
private void saveFile(String filePath,
boolean appendFlag) //SAVE
{
try
{
FileWriter fw = new
FileWriter(filePath,appendFlag);
if(appendFlag)
//adding a header detail
{
fw.write(tf.getText() +
"\r\n");
if(currentDirectory.equals("Indexes"))
{
indexes.add(tf.getText());
addIndexesToList();
}
else
{
samples.add(tf.getText());
addSamplesToList();
}
}
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)
//SET UNSAVED FLAG
{
if(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 CodeSamplesOrganiser();}
}
back
top
main page
vb snippets page
java snippets page
vbscript snippets page
email
Page last modified