Reguläre Ausdrücke mit GUI

madman

Mitglied
Hi Leute,
ich bin ein absoluter Nerd in sachen GUI . ..

wir sollen "Schreiben Sie ein Programm zum Testen von regulären Ausdrücken. Nach der Eingabe eines gültigen Ausdrucks, kann Text auf mögliche Vorkommen des Musters überprüft werden. Jeder Treffer wird in Form eines Eintrags angezeigt, welcher neben dem Text auch die Position angibt. Zur Anordnung der notwendigen Komponenten ist ein GridbagLayout zu verwenden. Stellen Sie zudem sicher, dass der zu überprüfende Text erst dann eingegeben werden kann, nachdem ein gültiger regulärer Ausdruck eingegeben wurde; das Textfeld wechselt dann seine Hintergrundfarbe von Weiß zu Grün."

was ich bis jetzt habe:
Java:
package Projekt;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
   

    public class RegexTest
    {
            public static void main(String[] args)
            {
                    while (true)
                    {
                           System.out.println("Regulärer Ausdruck:");
                           Pattern pattern = Pattern.compile(Eingabe.readLine());
    
                            System.out.println("Eingabe:");
                           Matcher matcher = pattern.matcher(Eingabe.readLine());
    
                           boolean match = false;
    
                            while (matcher.find())
                            {
                                   System.out.println("Treffer: " + matcher.group() + " Start: " + matcher.start() + " Ende: " + matcher.end());
    
                                    match = true;
                            }
   
                            if (!match)
                            {
                                    System.out.println("Kein Treffer...");
                            }
                    }
          }
   }

und halt
Java:
public class MyGridBagLayout extends Frame implements ActionListener, TextListener  
  {
	   Label regExLabel;
	   TextField regExText, matchText;
	   TextArea text;
	   
          public MyGridBagLayout(String title)
            {
        	 
                    super(title);
    
                    setLayout(new GridBagLayout());
            
                    regExLabel = new Label("Regex:");
                    regExLabel.setPreferredSize(new Dimension(50, 25));
    
                   
    
                     regExText = new TextField();
                    regExText.setPreferredSize(new Dimension(200, 25));
    
                     matchText = new TextField();
                    matchText.setPreferredSize(new Dimension(250, 25));
                
                     text = new TextArea();
                    text.setPreferredSize(new Dimension(250,400));
                    
                    regExText.addActionListener(this);
                    matchText.addActionListener(this);
                   text.addTextListener(this);
                    GridBagConstraints gbc = new GridBagConstraints();
    
                   gbc.gridx = 0;
                    gbc.gridy = 0;
    
                    add(regExLabel, gbc);
    
                    gbc.gridx = 1;
                   gbc.gridy = 0;
  
                  add(regExText, gbc);
   
                 gbc.gridx = 0;
                    gbc.gridy = 1;
                    gbc.gridwidth=2;
               
    
                    add(matchText, gbc);
    
                    gbc.gridx = 0;
                    gbc.gridy = 2;
                    gbc.gridwidth = 2;
                    gbc.fill = GridBagConstraints.BOTH;
    
                  add(text,gbc);
                  gbc.gridx=0;
                  gbc.gridy=3;
                  gbc.gridwidth=2;
    
                    addWindowListener(new CloseWindow(true));
    
                  pack();
  
                    setVisible(true);
            }

  public static void main(String[] args)
            {
                   new MyGridBagLayout("My GridBagLayout...");
                   
            }


wie bekomme ich das jetzt alles miteinander verbunden ??.. bin echt am verzweifeln und hoffe ihr könnt mir da helfen
 
S

SlaterB

Gast
tja, da fehlen noch Listener für die ganzen Aktionen, ActionListener gehen wenn Enter eingetippt wird,
wobei bei der TextArea nicht, am besten hast du noch einen richtigen Button 'jetzt gehts los',

und darin zum Teil Code ähnlich deiner vorherigen main-Methode,
solange du nix hast, kann man kaum mehr dazu sagen
 

madman

Mitglied
okay, danke erstmal.. dann werd ich mich mal in sachen listener informieren und google ausfragen :)

zu dem "jetzt gehts los button" das ganze soll ohne button funktionieren ..

aber danke nochmal.. =)
 

jgh

Top Contributor
...das ganze soll ohne Buttons auskommen

mmmh, schade...ansonsten (hatte nämlich mal angefangen) könnte man Teile der Aufgabe bspw. so lösen:

Java:
buttonRegex = new Button("RegEx");
		buttonRegex.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent ae) {
				try {
					regex = new Regex(regExText.getText());// der Konstruktor muss natürlich erstmal so implentiert werden(String als Parameter, und Exceptions werfend)
					text.setBackground(Color.GREEN);
					text.setEditable(true);
				} catch (PatternSyntaxException pse) {
					text.setBackground(Color.WHITE);
					text.setEditable(false);
					JOptionPane
							.showMessageDialog(frame,
									"Kein gültiger Regex-Ausdruck\n"
											+ pse.getMessage());
				}

			}
		});
 

madman

Mitglied
plinclw17adrxzktbeh4znv7hsk.jpg


so soll das ganze aussehen ..
vllt hilft euch das ja weiter
mitlerweile hab ichs hinbekommen, dass die erste zeile grün wird sobald ich was eingebe (egal ob falsch oder richtig ).. und er gibt mir unten im textfeld eine endlosschleife aus :D..
 

madman

Mitglied
für alle die sowas mal gebrauchen könnnten :)
und thx @all :)

Java:
package Gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import Projekt.CloseWindow;

@SuppressWarnings("serial")
public class RegExCheck extends JFrame implements ActionListener, KeyListener
{
	JLabel regExLabel;
	JTextField regExText, matchText;
	JTextArea text;

	public RegExCheck(String title)
	{

		super(title);

		setLayout(new GridBagLayout());
		setResizable(false);

		regExLabel = new JLabel("Regex:");
		regExLabel.setPreferredSize(new Dimension(50, 25));

		regExText = new JTextField();
		regExText.setPreferredSize(new Dimension(200, 25));

		matchText = new JTextField();
		matchText.setPreferredSize(new Dimension(250, 25));
		matchText.setEditable(false);

		text = new JTextArea();
		text.setPreferredSize(new Dimension(250, 400));
		text.setEditable(false);
		regExText.addKeyListener(this);
		matchText.addActionListener(this);

		GridBagConstraints gbc = new GridBagConstraints();

		gbc.gridx = 0;
		gbc.gridy = 0;

		add(regExLabel, gbc);

		gbc.gridx = 1;
		gbc.gridy = 0;

		add(regExText, gbc);

		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.gridwidth = 2;

		add(matchText, gbc);

		gbc.gridx = 0;
		gbc.gridy = 2;
		gbc.gridwidth = 2;
		gbc.fill = GridBagConstraints.BOTH;

		add(text, gbc);
		gbc.gridx = 0;
		gbc.gridy = 3;
		gbc.gridwidth = 2;

		addWindowListener(new CloseWindow(true));

		pack();

		setVisible(true);
	}

	public void actionPerformed(ActionEvent e)
	{

		Pattern pattern = Pattern.compile(regExText.getText());
		Matcher matcher = pattern.matcher(matchText.getText());

		boolean match = false;

		while (matcher.find()) {

			text.append("Treffer: " + matcher.group() + " Start: "
					+ matcher.start() + " Ende: " + matcher.end() + "\n");

			match = true;

		}

		if (!match) {
			text.append("Kein Treffer...");
		}

	}

	public static void main(String[] args)
	{
		new RegExCheck("My GridBagLayout...");

	}

	@Override
	public void keyTyped(KeyEvent e)
	{

	}

	@Override
	public void keyPressed(KeyEvent e)
	{

		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			try {
				Pattern test1 = Pattern.compile(regExText.getText());
				regExText.setBackground(Color.GREEN);
				matchText.setEditable(true);
				regExText.transferFocus();
			} catch (PatternSyntaxException ps) {

				JOptionPane.showMessageDialog(
						null,
						"Error while compiling the given pattern:"
								+ ps.getPattern(), "ERROR",
						JOptionPane.ERROR_MESSAGE);
			}

		}

	}

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

	}

}
 

Ähnliche Java Themen

Neue Themen


Oben