Java

  • Themenstarter Themenstarter sw33tlull4by
  • Beginndatum Beginndatum
S

sw33tlull4by

Guest
Hi!
Der Code den ich erstellt habe, funktionniert genauso wie ich es wollte.
Was mich aber an diesem Code stoert ist das ich in der Klasse globale Variablen setzten muss damich ich mit der ActionListener-Methode mit den Dingern arbeiten kann.
Meine Frage ist also:
Kennt irgendjemand eine Moeglichkeit wie ich diie globalen Dinger ohne Probleme in die Methode holen kann?
Die Methode ist zwar keine Mainmethode aber man kann das ja einfach umschreiben.
mfg

sw33t


Code:
package apiversuch;

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class anotherone implements EventListener
{

	static JTextField eingabe = new  JTextField(4);

	static JButton bla = new JButton();
	
	public static void schreiben()
	{

		

		
		JFrame abhaengig = new JFrame("Anotherone");
		JFrame.setDefaultLookAndFeelDecorated(true);

		abhaengig.setVisible(true);
		abhaengig.setPreferredSize(new Dimension(300,300));


		JPanel hola = new JPanel(new BorderLayout());

		bla.setText("change me");

		bla.addActionListener(new ActionListener()
					{
						public  void actionPerformed(ActionEvent d)
							{
								bla.setText((String)eingabe.getText());
								return;	
							}
					}
				     );
	
		hola.add(bla,BorderLayout.SOUTH);
		hola.add(eingabe,BorderLayout.NORTH);
			
	        hola.setBorder(BorderFactory.createEmptyBorder(5,10,15,20));		

		abhaengig.add(hola,BorderLayout.CENTER);
		
		abhaengig.pack();

		return;
	}

}
 
du willst "bla" in actionPerformed haben ohne bla static zu machen? Warum sollte das nicht klappen?

Code:
import javax.swing.*;
import java.awt.event.*;

public class Test {

	private JTextField text;
	private JButton button;

	
	public void foo() {
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				text.setText("test");
			}
		});
	}


	

}

Der Code kompiliert bei mir ...

Dein Code ist ja richtig gruselig ...
- alles static
- du erzeugst ohne erkennbaren Grund ein JFrame in einer statischen Methode, deren namen nichts mit dem zu tun hat, was da drin steht ...

Achja: wenn du das static von den Variablen weg nimmst muss deine Methode auch non-static werden ..
 
Nein du hast mich nicht ganz verstanden.
Das was du gemacht hast ist das gleiche was ich gemacht habe nur in gruen.
static heisst das es in dem gesamten Prog nur eine Instanz dieser Klasse geben darf,
Das ist auch genau das was ich wollte, denn ich habe hier mit der GUI nur rumprobiert, damit ich es spaeter auf ein anderes Programm uebertragen kann.
Ich wollte es static deklarieren, da ich keinen Bock und keine Notwenigkeit sah dafuer extra eine Instanz zu erstellen, abgesehen davon bin ich schreiibfaul,ein Wort gegen eine Zeile, da nehme ich natuerlich das Wort.^^
Mit dem Namen der einzelnen Sachen und deren Funktionen hast du recht, wuerde mir auch nicht einfallen es in einem groesseren Projekt zu versuchen.
Ich bin was java angeht kein Crack und ich vertrete immer noch die Ansicht:

"I never thought that a Coup of Coffee could give a BJ, but now I know JAVA sucks!";

Javaskript sei mal dahin gestellt, aber Java???Nein danke, nicht fuer mich.
Obwohl es GROESTENTEILS Portabel ist, sie Handys und JavaApplets.

Was ich wissen wollte ist:
Kann ich die Buttons und Textfelder irgendwie in die Methode reinholen?
(Sorry wenn das angangs nicht so rueberkam)
Denn bei mir kommt immer die Kompielermeldung:

....Tries to access from inner Class... needs to be declared Final...

Aber Final ist ja nicht in meinem Sinne da ich die Beschrieftung ja noch aendern will.

Und wiso sagst du das ich einen JFrame ohne ersichtlichen Grund erzeuge?
Ich Zeige ja den Frame an und damit ich die Biuttons auch anzeigen kann muessen die halt da mit rein, das JPanel koennte ich , meines wissens nach weglassen und alles direkt ins Fenster packen.
mfg

sw33t
 
Static hat nichts damit zu tun, dass du eine Instanz der Klasse erzeugt werden darf. Wenn du das erreichn willst musst du dir das Singleton-Pattern anschauen.

Bei dem final bin ich mir gerade nicht ganz sicher, aber ich denke du kannst trotz einer final-declaration von JTextField die setText(String)-Methode aufrufen.
 
Code:
import javax.swing.*;
import java.awt.event.*;

public class Test {

	
	public void foo() {
		final JTextField text = new JTextField();
		JButton button = new JButton();
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				text.setText("test");
			}
		});
	}


	

}
compiliert ohne Probleme bei mir...

@sw33tlull4by
Ich hab dich auch nicht ganz verstanden. Was ist dein Problem? Du willst das JTextField und den JButton auch in der actionPerformed-Methode nutzen, oder seh ich da was falsch? Was ist so falsch daran, es mit globalen Variablen ( den Sinn von Static versteh ich hier auch nicht.... ) durchzuführen?
Du kannst es natürlich auch anders machen:

Code:
public class Test {

	
	public void foo() {
		JTextField text = new JTextField();
		JButton button = new JButton();
		Listener listen = new Listener(button,text);
		button.addActionListener(listen);
	}

	public class Listener implements ActionListener {
		JButton b;
		JTextField t;
		public Listener(JButton bu, JTextField txt) {
			b=bu;
			t=txt;
		}
		public void actionPerformed(ActionEvent e) {
			t.setText("Text");
		}
	}
	

}

oder eben es über implements definierst und über globale Variablen nutzt:

Code:
import javax.swing.*;
import java.awt.event.*;

public class Test implements ActionListener {

	private JTextField text;

	public void foo() {
		text = new JTextField();
		JButton button = new JButton();
		button.addActionListener(this);
	}

	public void actionPerformed(ActionEvent e) {
		text.setText("test");
	}

}
 
thx...
die Codes sind schon eher das was ich suche.
Wiso ich das nicht mit den Globalen Variabeln machen will?
Encapsukation und ich versuche alle Sachen die ich benutze so dicht wie moeglich beieinander zu behalten also nach Moeglichkeit ein einer Methode(lesbarkeit und Wartung), es sei denn es wuerde zu redundantem Code fuehren.
Ist halt ein Tick von mir.
Vielen Dank fuer eure Hilfestellungen.
mfg

Sw33t
 
Dein Problem ist der Zugriff aus einer anonymen Klasse(ActionListener). Aktivierst du an der Stelle eine methode ,die das selbe macht , dürfte es keine Probleme geben.
mfG
 
Ich habe ebenfalls eine Frage zu Java.

Meine Frage ist , ob es ein Programm gibt ( so etwas ähnliches wie Paint sollte es sein ) , womit man etwas malen kann um damit dann die koordinaten von bestimmten punkten in der zeichnung abzulesen.
So kann man dann im Programm die koordinaten bei zb drawline(); eingeben und erählt eine saubere Zeichnung.
Mit schätzen klappt das bei etwas komplizierteren sachen nähmlich nicht mehr so gut icon_wink.gif


Das könnte man auch selbst machen indem man ein Koordinaten kreuz in Java bei Paint öffnet und dann drüber malt ..

Aber wo gibt es solch ein KoordinatenKreuz / oder am besten ein Programm dafür ??




MfG
Steve
 
und was genau hat das mit java tun?? hört sich für micht nach vektorgraphik-programmen an, was du da beschreibst.
 
Nene , es soll kein programm sein bei dem der benutzer etwas zeichnenö kann.

Ich meinte damit ich selbst etwas zeichnen kann ( so wie bei paint ) aber , dass ich auf ein kooridnaten kreuz zeichnen kann , damit ich dran sehen kann wie die kooridaten sind.


Damit ich die dann im Programm ( das ich selbst schreibe ) benutzen kann.

WEil normaler weise schätze ich immer. Zb wenn ich eine linie schräg ober den bildchirm haben will ( vonn 0,0 nach 500,500 zb )



Ich wollte aber fragen ob es ein Programm gibt bei dem man in diesem beispiel einfach eine linie zeichnet .. und da steht dann über welche koordinaten ( über wie viel pixel ) die linie geht.

Weil das java-koordinaten kreuz hat ja 0 oben rechts in der ecke ..



----

Anders könnte man auch einfach das Java-Koordinaten kreuz bei paint einfügen und dann drübermalen
 
Nene , es soll kein programm sein bei dem der benutzer etwas zeichnenö kann.

Ich meinte damit ich selbst etwas zeichnen kann ( so wie bei paint )

Du bist also kein Benutzer?? Hä? Und Paint ist kein Programm für Benutzer? Für wen denn dann? Also ich raffs nicht ...
 
Original von SteveO1
Nene , es soll kein programm sein bei dem der benutzer etwas zeichnenö kann.

Ich meinte damit ich selbst etwas zeichnen kann ( so wie bei paint ) aber , dass ich auf ein kooridnaten kreuz zeichnen kann , damit ich dran sehen kann wie die kooridaten sind.

Du widersprichst dir gerade so extrem...

Also wenn ich das mal entziffern dürfte ( ich versuchs einfach mal ): Du willst ein Koordinatenkeuz haben, in das man einen Linie zeichnen kann und dann die Koordinaten von versch. Punkten angezeigt werden.

Wenn das so ist: Der MouseListener bzw der MouseMotionListener sollten dir dabei weiter helfen. Mit dem MouseEvent, das bei beiden mit einbezogen werden muss, gibt dir die Koordinaten an. D.h. mit mousePress(MouseEvent me) setzt die Anfangskoordinaten und speicherst diese in Variablen. Mit mouseRelease(MouseEvent me) setzt du die Entkoordinaten und speicherst diese wieder in Variablen. Ob du nun eine Linie zeichnest oder dir die Punkte irgendwo ausgeben lässt ist egal.
 
MAN !!

GENAU SO EBEN NICHT


Ich meine , dass ich dass Programm nicht selber schreiben möchte , damit der Benutzer da etwas reinmalt und ich dann die koordinaten weiß.

Ich suche ein fertiges Programm ( falls es so etwas schon gibt ) wo ich dann reinmalen kann. Dieses Programm sollte einen hintergrund ( z.b. ) haben bei dem man das Java koordinaten kreuz sieht , sodass ich die koordinaten von meiner eigenen zeichnung in diesem ( schon fertigen ) programm ablesen kann.




Warum ich so ein Programm brauche/suche ????
Wenn man (ich) in java zb in der paint() methode etwas zeichnen will.
sagen wir mal eine linie die schräg über den bildchschirm geht..
paint(Graphics g)
{ g.drawLine(0,0,500,500 };

Im normalfall würde ich diese Koordinaten schätzen. ( Abschätzen von welcher koordinate zu welcher koordinate diese linie gehen müsste damit ich eine linie habe die schräg über den bildschirm geht )

Aber was wenn ich jetzt zb einen Stern(oder die umrisse eines Tieres , was auch immer ) zeichnen will ???
Das ist verdammt schwer diese linien alle abzuschätzen , also wäre es gut wenn ich ein programm hätte , indem ich meine zeichnugn einfach so reinmalen kann ( eben so wie bei paint ) und danach die koordinaten ablesen,

Dann kann ich diese Koordinaten in meinem Programm ( das ich selbst schreibe , und dann in diesem Fall einen stern enthält ) benutzen..






Viel Text , aber ich hoffe ich hab es jetzt ausführlich genug erklärt!


DANKE
Steve
 
das würde ich aber nicht mit Graphics.drawLine() machen :D da wirste ja blöd mit ^^

und nen stern würde ich mit ein bissel mathematischer Trickserei programmieren... sofern er regelmäßig ist ;) Und naja, die Umrisse von deinem Tier, das lohnt sich nicht wirklich, die mit Linien zeichnen zu lassen, wie gesagt. Da bind das Bild lieber direkt in deine Zeichenfläche ein...
 
das waren doch nur beispiele !! ;-)
Ich lerne kein Java um ein Tier zu zeichnen .. Und ich weiß auch das es mehrere methoden gibt und man das nicht nur aus DrawLine macht.
 
Alter check einfach, dass kein Mensch checkt was du da laberst ...

Was zum Teufen ist ein "Java koordinaten kreuz"???
 
Also ganz ehrlich bei deinem Vorhaben wuerde ich eher auf meine mathematischen Kenntnisse vertrauen und auf ungefähre Angaben vertrauen, als auf normales Ablesen ( du willst ein Koordinatenkreuz mit Pixeln? - Viel Spaß... ). Zur Not kann man das Programm ja auch noch verändern...

Aber was wenn ich jetzt zb einen Stern(oder die umrisse eines Tieres , was auch immer ) zeichnen will ???
Dann berechne ich mir aus den gegebenen Winkeln und Strecken die nötigen Koordinaten. Das hat u.a. den Vorteil, dass du den Stern vergrößern/verkleinern kannst, wie du es gerne hättest.
 
Serow , vielleicht "checkst" du es ja einfach nicht.
wenn du nicht weißt was ein koordinaten kreuz ist , dann guck bei google nach oder frag jemanden der vielleicht schon in der 5.klasse war .

Und mit Java-Koordinatenkreuz mein ich dann das Koordinaten kreuz nachdem sich java richtet. Weil in Java fängt das Kreuz oben links am bildchschirm an.

Mir ist klar ,dass ein Koordinatenkreuz mit Pixeln nicht möglich sein wird ,aber dann halt zb immer in 100 pixel abständen.
Und natürlich kann man sich es auch errechnen.
Aber es geht nunmal nicht immer und darum habe ich nach solch einem Programm gefragt.

Anscheinend gibt es so ein Programm ( noch ) nicht , sonst kämen nicht sowelche antworten.
Und wie sieht es mit einem Bild von diesem Koordinatenkreuz aus ??


Sowas nur in größer zb:
09fig02.gif
 
Zurück
Oben