Letters uit text tellen

Status
Niet open voor verdere reacties.

Passenger

Gebruiker
Lid geworden
19 nov 2007
Berichten
8
Okay nog eentje.
Deze oef moet een aantal letters uit een getypte text tellen en weergeven, dus bv
letter A komt 3 keer voor, letter B 6 keer etc..

Zo zou het er uit moeten zien:



De layout is redelijk gelukt, ik heb wel een grijs randje tussen de gele labels en de onderste button maarja..
De event handling is minder,
Ik heb namelijk geen idee hoe ik die text moet doorlopen en de letters tellen en opslaan.

Nog iets, is er een manier om een JTextArea een maximum aantal regels te geven?
Want als ik nu 100x een linebreak typ verkloot die textarea de hele layout (de gele labels en de knop verdwijnen gewoon)

Men code (deze is waarschijnlijk ook verre van perfect dus eventuele verbeteringen / simplifications zijn ook welkom ;p ) :

Maar als iemand dus mij op weg kan zetten met het gedeelte van de event handling, zou zeer geapprecieert worden, thanks.

Code:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class TestStatisticsGUI extends JFrame {
	
	private JPanel gridPanel = new JPanel(new GridLayout(13, 4));
	private JButton countButton = new JButton("Statistics");
	private JTextArea txtVeld = new JTextArea(10, 5);
	private JLabel[] labels;
	private String[] alfabet = new String[] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
	private int j = 0;
	private char[] lettersArray;
	
	public TestStatisticsGUI() {
		super("TextStatistics");
		setLayout(new BorderLayout());
		
		add(txtVeld, BorderLayout.NORTH);
		labels = new JLabel[52];
		
		ButtonHandler handler = new ButtonHandler();
		countButton.addActionListener(handler);
		
		for (int i = 0; i < labels.length; i++){
			labels[i] = new JLabel();
		
			if (i == 0 || i % 2 == 0  || i % 4 == 0){
				
				labels[i].setText(alfabet[j]);
				j++;
				}
			
		}
		for (int i = 0; i < labels.length; i++){
			labels[i].setOpaque(true);
			labels[i].setBackground(Color.YELLOW);
		}
				

		for (int i = 0; i < labels.length; i++) {
			gridPanel.add(labels[i]);
		}
		add(gridPanel, BorderLayout.CENTER);
		add(countButton, BorderLayout.SOUTH);
	}
	
	private class ButtonHandler implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub

                          //HULP ??

		}
		
	}

}
 
Wat je denk ik beter zou kunnen doen, is een eventhandler(actionlistener of een keylistener) op de textarea te zetten.
Elke keer dat er een letter wordt getypt, dan je dan die letter een hoger maakt.
Als je dan de backspace gebruikt, dan haal je de laatste letter uit de textarea en verminder je die vervolgens.
 
Ik heb er wat aan zitten proberen en was tot dit gekomen:

Code:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class TestStatisticsGUI2 extends JFrame implements KeyListener {
	
	private JPanel gridPanel = new JPanel(new GridLayout(13, 4));
	private JButton countButton = new JButton("Statistics");
	private JTextArea txtVeld = new JTextArea(10, 5);
	private JLabel[] labels;
	private String[] alfabet = new String[] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
	private int[] teller;
	private int j = 0;
	
	public TestStatisticsGUI2() {
		super("TextStatistics");
		setLayout(new BorderLayout());
		
		add(txtVeld, BorderLayout.NORTH);
		labels = new JLabel[52];
		
		
		for (int i = 0; i < labels.length; i++){
			labels[i] = new JLabel();
		
			if (i == 0 || i % 2 == 0  || i % 4 == 0){
				
				labels[i].setText(alfabet[j]);
				j++;
				}
		}
		for (int i = 0; i < labels.length; i++){
			labels[i].setOpaque(true);
			labels[i].setBackground(Color.YELLOW);
		}

		for (int i = 0; i < labels.length; i++) {
			gridPanel.add(labels[i]);
		}
		add(gridPanel, BorderLayout.CENTER);
		add(countButton, BorderLayout.SOUTH);
		
		addKeyListener( this );
	}

	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
		teller = new int[26];
		for (int i = 0; i < teller.length; i++){
			teller[i] = 0;
		}
		
		for (int i = 0; i < alfabet.length; i++){
			if (KeyEvent.getKeyText( e.getKeyCode() ) == alfabet[i]){
				teller[i] += 1;
			}
		}
		
		for (int i = 0; i < labels.length; i++){
			if (i == 1 || i % 2 != 0  || i % 4 != 0){
				String str = new Integer(teller[i]).toString();
				labels[i].setText(str);
				}
		}
	}

	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	
}


Maar het werkt niet.
Mss omdat die Keylistener op het JFrame staat?
Ik kan die niet op een TextArea zetten blijkbaar.
Anders heb ik geen idee waarom het niet werkt.

Ideeen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan