Befehle durch TextField ausführen

lcboy

Grünschnabel
Hallo !

Ich habe ein kleines Problem und hoffe auf eine Antwort:

Ich schreibe gerade ein Programm in Java und es enthält bis jetzt ein Frame, ein
Button und ein TexField. Jetzt würde ich es gerne so haben, dass das Programm
durch einen Klick auf den Button den Text im TextField ausführt. Zum Beispiel:

Im TextField enthaltener Text: System.exit(0);

Nach einem Klick auf den Button: Programm schließt sich !

Hier ist der Quellcode:

import java.awt.*;
import java.awt.event.*;

public class Fenster extends Frame implements ActionListener {

Button button1;
TextField textField1;

public static void main (String args[]) {

Fenster hauptfenster = new Fenster();

}

public Fenster() {
button1 = new Button("Ausführen");
textField1 = new TextField("");
button1.addActionListener(this);
button1.setBounds(10, 270,100,20);
add(button1);
add(textField1);
setLayout(null);
setSize(400,300);
setTitle("Programm");
setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand()=="Ausführen") {

}
}

}
 
Man könnte zum Beispiel eine Klasse generieren, den Befehl in die Main-Methode einbauen und damit ausführen.
 
Hallo!

Du könntest einfach mal folgendes probieren:
Code:
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Test02 extends JFrame {

	private JTextField txtCmd;

	private JButton btnAction;

	public Test02() {
		super("Test02");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		txtCmd = new JTextField("java.lang.System.exit(0)");
		btnAction = new JButton("Execute");
		btnAction.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				String cmd = txtCmd.getText().trim();
				if (cmd == null || cmd.equals(""))
					return;

				int idx = -1;
				int argsIdx = -1;
				String className = cmd.substring(0, idx = cmd.lastIndexOf('.'));
				argsIdx = cmd.indexOf('(');
				try {
					Class clazz = Class.forName(className);
					Object[] o = parseArgs(cmd, argsIdx);
					Method m = clazz.getMethod(cmd.substring(idx + 1, argsIdx),
							(Class[])o[0]);

					m.invoke(null, (Object[])o[1]);

				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				} catch (SecurityException e) {
					e.printStackTrace();
				} catch (NoSuchMethodException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}

			}

			private Object[] parseArgs(String cmd, int argsIdx) {
				if (!cmd.endsWith(")"))
					throw new IllegalArgumentException("Parenthesis incorrect!");

				String argsStr = cmd.substring(argsIdx + 1, cmd.length() - 1);
				StringTokenizer tokenizer = new StringTokenizer(argsStr, ",");
				Class[] cA = new Class[tokenizer.countTokens()];
				int idx = 0;
				List args = new ArrayList();
				while (tokenizer.hasMoreElements()) {
					String arg = (String) tokenizer.nextElement();

					try {
						int i = Integer.parseInt(arg);
						cA[idx] = int.class;
						args.add(new Integer(i));
					} catch (Exception e) {
						cA[idx] = String.class;
						args.add(arg);
					}
					idx++;
				}

				return new Object[] { cA, args.toArray()};
			}
		});

		getContentPane().add(txtCmd, BorderLayout.WEST);
		getContentPane().add(btnAction, BorderLayout.EAST);
		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new Test02();
	}
}

So solltest du zumindest mal die meisten static Methoden von Klassen aufrufen können die nur int und String als Parameter aufnehmen....

HTH

Gruß Tom
 

Neue Beiträge

Zurück