codice:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import src.Search.*;
public class Principale
{private JFrame frame;
private JDesktopPane desktop;
private JInternalFrame internalFrame;
private JButton OKButton, CancelButton, ExitButton, Letto;
private JTextField Termini, Anno;
private JPanel pulsPanel, textPanel, warnPanel, warnLabelPanel;
private Container desktopCont, buttonCont, textCont, warnCont, warnLabelCont;
private Color colore = new Color(204, 204, 204);
private String focusedField;
private String[][] risRicerca;
private Document doc;
public Principale()
{final int WIDTH=400;
final int HEIGHT=230;
JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame();
frame.setTitle("Ricerca in archivio");
frame.setSize(WIDTH, HEIGHT);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pulsPanel = new JPanel();
textPanel = new JPanel();
addButtons();
addTextFields();
setContainer(buttonCont, frame, pulsPanel, "South");
setContainer(textCont, frame, textPanel, "North");
frame.show();
}
private void addButtons()
{OKButton = new JButton("OK", new ImageIcon("images/ok.png"));
CancelButton = new JButton("Cancella", new ImageIcon("images/cancel.png"));
ExitButton = new JButton("Esci", new ImageIcon("images/exit.png"));
OKButton.setToolTipText("Avvia la ricerca");
CancelButton.setToolTipText("Reimposta i campi");
ExitButton.setToolTipText("Esci dal programma");
pulsPanel.add(OKButton);
pulsPanel.add(CancelButton);
pulsPanel.add(ExitButton);
ActionListener mainListener = new mainWindowListener();
OKButton.addActionListener(mainListener);
CancelButton.addActionListener(mainListener);
ExitButton.addActionListener(mainListener);
}
private void addTextFields()
{Termini = new JTextField(20);
Anno = new JTextField(4);
JLabel TermLabel = new JLabel("Termine:");
JLabel YearLabel = new JLabel("Anno:");
Termini.setToolTipText("Inserisci i termini da cercare");
Anno.setToolTipText("Inserisci l'anno");
textPanel.add(TermLabel);
textPanel.add(Termini);
textPanel.add(YearLabel);
textPanel.add(Anno);
MouseListener mouseClickListen = new listenForMouse();
Termini.addMouseListener(mouseClickListen);
Anno.addMouseListener(mouseClickListen);
KeyListener keyListen = new listenForKeys();
OKButton.addKeyListener(keyListen);
CancelButton.addKeyListener(keyListen);
ExitButton.addKeyListener(keyListen);
}
private void setContainer(Container cont, JFrame currFrame, JPanel panel, String area)
{cont = currFrame.getContentPane();
cont.add(panel, area);
}
private void mostraAvviso(String testoAvviso)
{desktopCont = frame.getContentPane();
desktop = new JDesktopPane();
desktop.setBackground(colore);
desktopCont.add(desktop, BorderLayout.CENTER);
internalFrame = new JInternalFrame("Avviso", false, false, false, false);
internalFrame.setSize(350, 120);
internalFrame.setLocation(20, 4);
internalFrame.setBackground(Color.white);
internalFrame.setFrameIcon(new ImageIcon("images/warning.png"));
internalFrame.setVisible(true);
desktop.add(internalFrame);
Letto = new JButton("Letto");
Letto.setToolTipText("Chiudi la finestra di avviso");
JTextArea warnLabel = new JTextArea(testoAvviso);
warnLabel.setEditable(false);
warnLabel.setBackground(colore);
warnPanel = new JPanel();
warnPanel.add(Letto);
warnLabelPanel = new JPanel();
warnLabelPanel.add(warnLabel);
ActionListener chiudiAvviso = new closeWarnListener();
Letto.addActionListener(chiudiAvviso);
warnCont = internalFrame.getContentPane();
warnCont.add(warnPanel, "South");
warnLabelCont = internalFrame.getContentPane();
warnLabelCont.add(warnLabelPanel, "Center");
internalFrame.moveToFront();
}
private class closeWarnListener implements ActionListener
{public void actionPerformed(ActionEvent event)
{internalFrame.dispose();
}
}
private class mainWindowListener implements ActionListener
{public void actionPerformed(ActionEvent event)
{Object source = event.getSource();
if (source == OKButton)
{
OKPressed();
}
else if (source == CancelButton)
{
CancelPressed();
}
else if (source == ExitButton)
{
System.exit(0);
}
}
}
private class listenForMouse implements MouseListener
{public void mouseClicked(MouseEvent event)
{Object source = event.getSource();
if(source == Termini)
{
focusedField = "Termini";
}
else if(source == Anno)
{
focusedField = "Anno";
}
}
public void mousePressed(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}
private class listenForKeys implements KeyListener
{
public void keyPressed(KeyEvent key)
{if(key.getKeyCode() == KeyEvent.VK_ENTER)
if(OKButton.isFocusOwner())
OKPressed();
else if(CancelButton.isFocusOwner())
CancelPressed();
else if(ExitButton.isFocusOwner())
System.exit(0);
}
public void keyReleased(KeyEvent key) {}
public void keyTyped(KeyEvent key) {}
}
public String[][] archiveSearch(String termine, String anno)
{
int i, j, y, currentIndex;
String[][] extractData = new String[50][4];
String[][] risult;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
try {doc = db.parse("archivio.xml");
Element root = doc.getDocumentElement();
NodeList nl_prod = root.getElementsByTagName("prodotto");
NodeList nl_child;
Node currNode, elemNode;
for (i=0; i<nl_prod.getLength(); i++)
{
currNode = nl_prod.item(i);
nl_child = currNode.getChildNodes();
for (j=1, y=0; j<nl_child.getLength(); j+=2, y++)
{
elemNode = nl_child.item(j);
extractData[i][y] = elemNode.getFirstChild().getNodeValue();
}
}
}
catch (IOException ioe)
{
avvisaUtente("Errore: " + ioe);
}
catch (org.xml.sax.SAXException se)
{Exception x = se;
if (se.getException() != null)
x = se.getException();
x.printStackTrace();
}
}
catch (ParserConfigurationException parseExc) {parseExc.printStackTrace();}
int numElem = 0;
y=0;
while (y<extractData.length && extractData[y][0] != null)
{
numElem++;
y++;
}
currentIndex = -1;
risult = new String[numElem][4];
for(i=0; i<numElem; i++)
{
if(!termine.equals("") && anno.equals(""))
{
if(extractData[i][0].indexOf(termine) != -1 || extractData[i][2].indexOf(termine) != -1)
{
currentIndex++;
for(y=0; y<4; y++)
risult[currentIndex][y] = extractData[i][y];
}
}
else if(termine.equals(""))
{
if(extractData[i][1].indexOf(anno) != -1)
{
currentIndex++;
for(y=0; y<4; y++)
risult[currentIndex][y] = extractData[i][y];
}
}
else
{
if(extractData[i][1].indexOf(anno) != -1 || extractData[i][0].indexOf(termine) != -1 || extractData[i][2].indexOf(termine) != -1)
{
currentIndex++;
for(y=0; y<4; y++)
risult[currentIndex][y] = extractData[i][y];
}
}
}
return risult;
}
public void showResults(String[][] ris)
{
new Ricerca(frame, ris);
}
private void avvisaUtente(String messaggio)
{JOptionPane.showMessageDialog(frame, messaggio, "Errore", JOptionPane.ERROR_MESSAGE);
}
private void OKPressed()
{
if(Termini.getText().equals("") && Anno.getText().equals(""))
{
String avv = "Prego, inserire almeno un parametro per la ricerca" + "\n" + "nel campo 'Termine' o nel campo 'Anno'";
mostraAvviso(avv);
}
else
{if (!Anno.getText().equals("") && !Anno.getText().matches("[0-9]*"))
{
String avv = "Attenzione, nel campo 'Anno'" + "\n" + "possono essere inseriti solo numeri";
Anno.setText("");
mostraAvviso(avv);
}
else {
risRicerca = archiveSearch(Termini.getText(), Anno.getText());
if(risRicerca[0][0] == null)
{
String avv = "Nessun risultato corrisponde" + "\n" + "ai criteri di ricerca inseriti.";
mostraAvviso(avv);
}
else
showResults(risRicerca);
}
}
}
private void CancelPressed()
{
Termini.setText("");
Anno.setText("");
if(focusedField.equals("Termini"))
Termini.requestFocus();
else if(focusedField.equals("Anno"))
Anno.requestFocus();
else
Termini.requestFocus();
}
public static void main(String[] args)
{
Principale princ = new Principale();
}
e questo è il file XML in cui cerca: