LetIFil.java [Last ned]

/*
 * GUI-program som teller antall forekomster av en innlest
 * tegnsekvens på en tekstfil. I denne oppgaven demonstreres
 * bruk av en "panel i panel"-teknikk for å konstruere GUI.
 * Vi beholder default organisering BorderLayout i stedet for
 * å veksle rett over i FlowLayout (se tidligere oppgaver).
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
 
public class LetIFil extends JFrame implements ActionListener {
 
  JTextField txtFil, txtSekvens;
  JLabel     etikettStatus;
  JButton    beregn, blank;
 
  public static void main(String[] args) {
    LetIFil vindu = new LetIFil();
    vindu.setTitle("Sekvensteller");
    vindu.setDefaultCloseOperation(EXIT_ON_CLOSE);
    vindu.opprettGUI();
    vindu.pack();
    vindu.setVisible(true);
  }
 
  public void opprettGUI() {
    // Beholder default organisering: BorderLayout
    // Viser bruk av "panel i panel"-teknikken
    JPanel nvp = new JPanel();
    JPanel svp = new JPanel();
    JPanel vp = new JPanel();
    JPanel cp = new JPanel();
    JPanel ep = new JPanel();
    JPanel sp = new JPanel();
 
    nvp.add( new JLabel(" Filnavn:") );
 
    txtFil = new JTextField(15);
    nvp.add(txtFil);
 
    svp.add( new JLabel("Søkesekvens:") );
 
    txtSekvens = new JTextField(12);
    svp.add(txtSekvens);
 
    // Alle panel er default FlowLayout, men
    // dette kan endres til annen organisering
    vp.setLayout( new BorderLayout() );
    vp.add(nvp, BorderLayout.NORTH);
    vp.add(svp, BorderLayout.SOUTH);
 
    ep.setLayout( new BorderLayout() );
    beregn = new JButton("Søk");
    beregn.addActionListener(this);
    ep.add(beregn, BorderLayout.NORTH);
 
    blank = new JButton("Blank ut");
    blank.addActionListener(this);
    ep.add(blank, BorderLayout.SOUTH);
 
    cp.add(vp);
    cp.add(ep);
    add(cp, BorderLayout.CENTER);
 
    sp.setLayout( new FlowLayout(FlowLayout.LEFT) );
    // Ekstra: Setter venstrejustering på sør-panelet
    sp.add( new JLabel(" Søkeresultat:") );
    etikettStatus = new JLabel("");
    sp.add(etikettStatus);
 
    add(sp, BorderLayout.SOUTH);
  }
 
  public void actionPerformed(ActionEvent e) {
    if ( e.getSource() == beregn ) {
      tellSekvenserPåFil();
    }
    else if ( e.getSource() == blank ) {
           txtFil.setText("");
           txtSekvens.setText("");
           etikettStatus.setText("");
         }
  }
 
  // Hjelpemetode til filaktivitet
  private void tellSekvenserPåFil() {
    try {
      String leterEtter = txtSekvens.getText();
      String filnavn = txtFil.getText();
      File fil = new File(filnavn);
      Scanner leser = new Scanner(fil);
      int antallSekvenser = 0;
      while ( leser.hasNext() ) {
        String sekvens = leser.next();
        if ( sekvens.contains(leterEtter) )
          antallSekvenser++;
      }
      leser.close();
      etikettStatus.setText("Antall forekomster = " + antallSekvenser);
    }
    catch (Exception e) {
      etikettStatus.setText("Kunne ikke lese fra filen!");
    }
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.