JDialog übergibt eingaben nicht an aufrufende klasse

mac21

Aktives Mitglied
Hallo,
wie ihr euch schon denken könnt, habe ich ein problemchen...^^
ich habe eine klasse sender, die eine instanz einer anderen klasse (die JDialog implementiert) erzeugt, doch dann werden die daten nicht von der JDialog-klasse an die aufrufende klasse gegeben...
hier die beiden klassen:

Klasse sender (hierbei ist nur die methode "voidCustom()" wichtig
Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

public class sender{

	int PORT;
	String GROUP_ADDRESS;
	InetAddress group;
	MulticastSocket s;
	byte[] buffer;
	DatagramPacket packet;
	
	public sender() throws IOException{
	
		voidStandard();
	}
	
	public sender(String[] params) throws IOException{
	
		//for(int a = 0; a < params.length; a++)
		//{
		//if(params[a].equals("-i")){voidCustom(); break;}
		//else{voidStandard();}
		//}
		//System.out.println("Error reading parameters");
		voidCustom();
	
		
	}
	
	void voidStandard() throws IOException{
		
		PORT = 32224;
		GROUP_ADDRESS = "239.255.255.250";
		group = InetAddress.getByName(GROUP_ADDRESS);
		s = new MulticastSocket(PORT);
		s.joinGroup(group);
		buffer = "Hello World".getBytes("UTF-8");
		packet = new DatagramPacket(buffer, buffer.length, group, PORT);
		s.send(packet);
		
	}
	
	void voidCustom() throws IOException{
	
		JDia JD = new JDia();
		PORT = JD.PORT;
		GROUP_ADDRESS = JD.GROUP_ADDRESS;
		group = InetAddress.getByName(GROUP_ADDRESS);
		s = new MulticastSocket(PORT);
		s.joinGroup(group);
		buffer = JD.buffer;
		packet = new DatagramPacket(buffer, buffer.length, group, PORT);
		s.send(packet);	
		
	}
	
	public static void main(String[] args) throws IOException {
		if(args.length>0) {sender se = new sender(args);}
		else {sender se = new sender();}
		
	}
	
	
}

klasse JDia (extends JDialog)
Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;


public class JDia extends JDialog{

	int PORT;
	String GROUP_ADDRESS;
	byte[] buffer;
	JTextField[] jtf;
	JLabel[] jl;
	JButton jb;
	
	public JDia() {
		
	setSize(300, 200);
	setLayout(null);
	Dimension d = this.getToolkit().getScreenSize();
    this.setLocation((int) ((d.getWidth() - this.getWidth()) / 2), (int) ((d.getHeight() - this.getHeight()) / 2));
    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    
    jb = new JButton("Confirm");
    jb.setBounds(80, 120, 100, 20);
    jb.setVisible(true);
    add(jb);
    jb.requestFocus();
    jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e)
        {
    	PORT = Integer.parseInt(jtf[0].getText());
    	GROUP_ADDRESS = jtf[1].getText();
    	try {
			buffer = jtf[2].getText().getBytes("UTF8");
		} catch (UnsupportedEncodingException e1) {}
    	setVisible(false);
    	

        }});
    
    jl = new JLabel[3];
    jl[0] = new JLabel("alt. Port: ");
    jl[1] = new JLabel("alt. Group-Adress: ");
    jl[2] = new JLabel("alt. Message: ");
    jl[0].setVisible(true);
    jl[1].setVisible(true);
    jl[2].setVisible(true);
    jl[0].setBounds(10, 10, 300, 15);
    jl[1].setBounds(10, 50, 300, 15);
    jl[2].setBounds(10, 90, 300, 15);
    add(jl[0]);
    add(jl[1]);
    add(jl[2]);
    
    jtf = new JTextField[3];
    jtf[0] = new JTextField("32224");
    jtf[1] = new JTextField("239.255.255.250");
    jtf[2] = new JTextField("Hello World");
    jtf[0].setVisible(true);
    jtf[1].setVisible(true);
    jtf[2].setVisible(true);
    jtf[0].setBounds(170, 10, 100, 15);
    jtf[1].setBounds(170, 50, 100, 15);
    jtf[2].setBounds(170, 90, 100, 15);
    jtf[0].setFocusable(false);
    jtf[1].setFocusable(false);
    jtf[2].setFocusable(false);
    add(jtf[0]);
    add(jtf[1]);
    add(jtf[2]);
    

    
    jtf[0].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[0].setText("");}});
    jtf[1].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[1].setText("");}});
    jtf[2].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[2].setText("");}});
    		
    setVisible(true);
    

	}

	public static void main(String[] args) throws IOException {
		new JDia();
	}


}
 
C

Camino

Gast
Hallo, du hast da wohl mehrere grundlegende Fehler drin.

Du hast 2 main-Methoden. Diese werden zum Programmstart aufgerufen und du solltest deshalb nur eine davon haben. Nimm mal die aus der Dialogklasse raus, weil das dort so auch keinen Sinn macht.

Du solltest dir angewöhnen, Klassennamen mit einem grossen Anfangsbuchstaben zu schreiben. Und Variablennamen durchgehend mit Grossbuchstaben zeigen an, dass es Konstanten sind, also Variablen- und Methoden-Namen durchgehend mit Kleinbuchstaben schreiben.

OK, erst mal das. Ich schau mir das mit der Datenrückgabe an die aufrufende Klasse mal an....

ERGÄNZUNG: Wenn du Daten von dem JDialog an die aufrufende Klasse übergeben möchtest, dann kannst du dem Konstruktor die aufrufende Klasse als Referenz mit übergeben
Code:
new MyDialog(this)
, dann hast du in der Dialogklasse Zugriff auf Methoden der aufrufenden Klasse und kannst dort Werte setzen.
 
Zuletzt bearbeitet von einem Moderator:

mac21

Aktives Mitglied
super schnelle antwort ;) danke dir
stimmt, hab ne main zu viel :(
hab sie rausgenommen und rufe nun in sender auf
Java:
JDia JD = new JDia(this);

in JDia ist der Konstruktor nun

Java:
public JDia(sender se)



wieso funktioniert das nicht so wie ich will?


ich habe in JDia die Methoden:
Java:
	public int getPORT() {
		return PORT;
	}
	
	public String getADDRESS(){
		return GROUP_ADDRESS;	
	}
		
	public byte[] getMessage(){
		return buffer;	
	}

und wenn ich in sender schreibe
Java:
PORT = JD.getPORT();

sagt er im popup "The method getPORT() is undefined for the type JDia"
und schlägt vor, in JDia eine methode getPORT() zu definieren
klick ich das an, erzeugt er eben diese und dann meckert er in JDia, da schon eine gleichnamige methode vorhanden is...
 
C

Camino

Gast
Da musst du wohl deine Dialogklasse nochmal hier posten, wenn du da jetzt was dran geändert hast, sonst kann man nur schwer erraten, wo genau der Fehler ist.

Aber von der Herangehenseweise ist es so, dass du aus der aufrufenden Klasse deinen Dialog erzeugst, und die Referenz mit übergibst. Dann machst du irgendwas in dem Dialog und rufst von dem Dialog aus über die Referenz der aufrufenden Klasse die dortigen Methoden auf, um die Werte zu setzen. Also eigentlich eher andersum, als wie du es machen möchtest. Ich hab das jetzt hoffentlich nicht zu kompliziert ausgedrückt.
 

mac21

Aktives Mitglied
so sieht JDia gerade aus:
Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;


public class JDia extends JDialog{

	int PORT;
	String GROUP_ADDRESS;
	byte[] buffer;
	JTextField[] jtf;
	JLabel[] jl;
	JButton jb;
	sender sen;
	
	public JDia(sender se) {
	sen = se;	
	setSize(300, 200);
	setLayout(null);
	Dimension d = this.getToolkit().getScreenSize();
    this.setLocation((int) ((d.getWidth() - this.getWidth()) / 2), (int) ((d.getHeight() - this.getHeight()) / 2));
    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    
    jb = new JButton("Confirm");
    jb.setBounds(80, 120, 100, 20);
    jb.setVisible(true);
    add(jb);
    jb.requestFocus();
    jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e)
        {
    	PORT = Integer.parseInt(jtf[0].getText());
    	GROUP_ADDRESS = jtf[1].getText();
    	try {
			buffer = jtf[2].getText().getBytes("UTF8");
		} catch (UnsupportedEncodingException e1) {}
    	sen.PORT=PORT;
    	sen.GROUP_ADDRESS=GROUP_ADDRESS;
    	sen.buffer=buffer;
		setVisible(false);
    	

        }});
    
    jl = new JLabel[3];
    jl[0] = new JLabel("alt. Port: ");
    jl[1] = new JLabel("alt. Group-Adress: ");
    jl[2] = new JLabel("alt. Message: ");
    jl[0].setVisible(true);
    jl[1].setVisible(true);
    jl[2].setVisible(true);
    jl[0].setBounds(10, 10, 300, 15);
    jl[1].setBounds(10, 50, 300, 15);
    jl[2].setBounds(10, 90, 300, 15);
    add(jl[0]);
    add(jl[1]);
    add(jl[2]);
    
    jtf = new JTextField[3];
    jtf[0] = new JTextField("32224");
    jtf[1] = new JTextField("239.255.255.250");
    jtf[2] = new JTextField("Hello World");
    jtf[0].setVisible(true);
    jtf[1].setVisible(true);
    jtf[2].setVisible(true);
    jtf[0].setBounds(170, 10, 100, 15);
    jtf[1].setBounds(170, 50, 100, 15);
    jtf[2].setBounds(170, 90, 100, 15);
    jtf[0].setFocusable(false);
    jtf[1].setFocusable(false);
    jtf[2].setFocusable(false);
    add(jtf[0]);
    add(jtf[1]);
    add(jtf[2]);
    

    
    jtf[0].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[0].setText("");}});
    jtf[1].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[1].setText("");}});
    jtf[2].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[2].setText("");}});
    		
    setVisible(true);
    

	}
	
	
	public int getPORT() {
		return PORT;
	}
	
	public String getADDRESS(){
		return GROUP_ADDRESS;	
	}
		
	public byte[] getMessage(){
		return buffer;	
	}

	
}

und so sender:
Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

public class sender{

	int PORT;
	String GROUP_ADDRESS;
	InetAddress group;
	MulticastSocket s;
	byte[] buffer;
	DatagramPacket packet;
	
	public sender() throws IOException{
	
		voidStandard();
	}
	
	public sender(String[] params) throws IOException{
	
		//for(int a = 0; a < params.length; a++)
		//{
		//if(params[a].equals("-i")){voidCustom(); break;}
		//else{voidStandard();}
		//}
		//System.out.println("Error reading parameters");
		voidCustom();
	
		
	}
	
	void voidStandard() throws IOException{
		
		PORT = 32224;
		GROUP_ADDRESS = "239.255.255.250";
		group = InetAddress.getByName(GROUP_ADDRESS);
		s = new MulticastSocket(PORT);
		s.joinGroup(group);
		buffer = "Hello World".getBytes("UTF-8");
		packet = new DatagramPacket(buffer, buffer.length, group, PORT);
		s.send(packet);
		
	}
	
	void voidCustom() throws IOException{
	
		JDia JD = new JDia(this);
		//PORT = JD.getPORT();
		//GROUP_ADDRESS = JD.getADDRESS();
		group = InetAddress.getByName(GROUP_ADDRESS);
		s = new MulticastSocket(PORT);
		s.joinGroup(group);
		//buffer = JD.getMessage();
		packet = new DatagramPacket(buffer, buffer.length, group, PORT);
		s.send(packet);	
		
	}
	
	public static void main(String[] args) throws IOException {
		if(args.length>0) {sender se = new sender(args);}
		else {sender se = new sender();}
		
	}
	
	
}
 
C

Camino

Gast
Wie schon gesagt, ich würde das anders herum machen, also nicht dass die aufrufende Klasse sich die Daten über die get-Methode vom Dialog holt, sondern dass der Dialog die Daten über eine set-Methode bei der aufrufenden Klasse setzt. Zum Beispiel beim Schliessen des Dialogs.
 

mac21

Aktives Mitglied
jap, danke dir
hab nun die methode im sender geändert:

Java:
void voidCustom() throws IOException{
	
		JDia JD = new JDia(this);
		PORT = JD.getPORT();
		GROUP_ADDRESS = JD.getADDRESS();
		group = InetAddress.getByName(GROUP_ADDRESS);
		s = new MulticastSocket(PORT);
		s.joinGroup(group);
		buffer = JD.getMessage();
		packet = new DatagramPacket(buffer, buffer.length, group, PORT);
		s.send(packet);	
		
	}

aber:
sobhald ich es als jar exportiert habe, und den sender starte, so funzt es,er sendet ein paket zum receiver wie sichs gehört
aber: wenn du in den sender guckst:
2 konstruktoren
der eine wird aufgerufen, wenn man die jar-verknüpfung mit dem parameter "-i" (interface) startet

sobald ich diese jar-verknüpfung mit parameter -i starte, so kommt auch mein JDialog und fragt nach daten
doch: sobald ich bestätige(siehe button->actionlistener) passiert nichts
es wird kein datagrampacket gesendet und der receiver empfängt auch nichts...
anscheinend nimmrt er die daten des JDialogs nicht an...
ich habe aber drauf geachtet den jdialog auszublenden und NICHT zu beenden mit exit() oder dispose()
erkennst du vllt meinen denk/programmfehler?
 
C

Camino

Gast
Ehrlich gesagt versteh ich nicht so ganz, was du da machst.

Java:
...
JDia JD = new JDia(this);
PORT = JD.getPORT();
GROUP_ADDRESS = JD.getADDRESS();
...

Du erzeugst in deiner aufrufenden Klasse einen JDialog und holst dann von dort mit den Methoden getPORT() und getADDRESS() int-Werte. Aber wenn ich mir die Dialog-Klasse anschaue, wird der int-Wert PORT erst mit dem ActionListener (Klick auf Button) gefüllt. Deshalb hatte ich dir ja auch (schon zweimal) gesagt, dass du das nicht mit einer get-Methode in der aufrufenden Klasse machen sollst, sondern in der Dialog-Klasse über die Referenz zur aufrufenden Klasse eine dortige set-Methode aufrufen und die Daten übergeben. Du machst es also immer noch so wie zu Beginn.

Auch die vielen setVisible in der Dialog-Klasse sind wohl fast alle überflüssig. Du musst deine Komponenten erstellen und dem Dialog hinzufügen, und dann zum Schluss den Dialog auf setVisible(true) setzen.

Und versuch dich bitte mal bei der Schreibweise an die Konventionen zu halten. Das macht es besser lesbar und verständlicher. So z.B. int port anstatt von int PORT. Oder auch einen aussagekräftigeren Namen für deinen Dialog, also nicht JD. Und den Namen der Klasse Sender und nicht sender.
 

mac21

Aktives Mitglied
ich weiß ja ich weiß ja,du hast da vollkommen recht,
ich erwarte auch nicht von anderen meine spaghettis zu verstehen...
tut mir leid, n bisschen struktur reinbringen... werds mir merken ;)

aber zwischendrin (siehe post weiter oben) habe ich es versucht mit einer setmethode

ich habe ja dann in JDia stehen gehabt:

Java:
    public JDia(sender se) {
	sen = se;	
	setSize(300, 200);
	setLayout(null);
	Dimension d = this.getToolkit().getScreenSize();
    this.setLocation((int) ((d.getWidth() - this.getWidth()) / 2), (int) ((d.getHeight() - this.getHeight()) / 2));
    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    jb = new JButton("Confirm");
    jb.setBounds(80, 120, 100, 20);
    jb.setVisible(true);
    add(jb);
    jb.requestFocus();
    jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e)
        {
    	PORT = Integer.parseInt(jtf[0].getText());
    	GROUP_ADDRESS = jtf[1].getText();
    	try {
			buffer = jtf[2].getText().getBytes("UTF8");
		} catch (UnsupportedEncodingException e1) {}
	sen.PORT = PORT;
        sen.GROUP_ADDRESS = GROUP_ADDRESS;
        sen.buffer = buffer;
         setVisible(false);
    	

        }});

und dennoch das selbe problem...
 
C

Camino

Gast
Bitte bring doch erst mal den Code in Ordnung, sonst ist das leider schwer zu lesen. Also unnütze Sachen raus, wie die setVisible bei den ganzen Komponenten. Wie gesagt, einfach nur die Komponenten erstellen und dem JDialog hinzufügen und am Ende beim JDialog das setVisible aufrufen.

Und es dürfte doch auch keinen grossen Aufwand geben, die Namen richtig zu schreiben, also aus dem sender ein Sender zu machen und die Variablen klein zu schreiben. Versteh nicht, warum du das nicht einfach mal schnell gemacht hast. Wie gesagt, je besser strukturiert der Code ist, desto einfacher ist es zu lesen und man erkennt auch besser, wo der Fehler liegt.

Und das kannst du mittlerweile auch vereinfachen:
Java:
Dimension d = this.getToolkit().getScreenSize();
this.setLocation((int) ((d.getWidth() - this.getWidth()) / 2), (int) ((d.getHeight() - this.getHeight()) / 2));

nämlich damit (this ist dein Dialog und frame dein aufrufendes Fenster):
Java:
this.setLocationRelativeTo(frame);

Und jetzt nochmal zu deinem Problem mit der Datenübergabe. Du schreibst in deine aufrufende Klasse eine set-Methode, in welcher du deinen int-Wert setzen kanst. Dadurch, dass du die Referenz in deinem Dialog hast, kannst du diese Methode von dort aufrufen und den int-Wert übergeben. Und am besten ist, wenn du deine Werte aus dem Dialog übergibst und ihn dann schliesst, wenn du ihn nicht mehr brauchst. Dann geht es mit den übergebenen Werte in deiner aufrufenden Klasse weiter. Und für JDialoge kannst du auch noch setzen, ob sie modal oder nicht sind, also ob das aufrufende Programm weiterläuft oder erst noch auf das Schliessen des Dialogs wartet.
 
C

Camino

Gast
Nochmal ganz einfach mit Codebeispielen.

In deiner aufrufenden Klasse hast du eine int-Variable:
Java:
private int port;

und eine set-Methode um diesen Wert zu ändern
Java:
public void setPort(int port){
    this.port = port;
}

Mit dieser Methode kannst du aus deinem Dialog den Wert ändern/setzen.

In deinem Dialog musst du dann die aufrufende Klasse als referenz übergeben und kannst dann auf die Methode setPOrt zugreifen und den Wert vom Dialog zu der aufrufenden Klasse übergeben.

Java:
...
private Sender sender;

public JDia(Sender sender) {
       this.sender = sender;
...

jb.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
        int port = Integer.parseInt(jtf[0].getText());
        sender.setPort(port);
        }
});
...

An deiner Stelle würde ich den Dialog modal setzen (wenn du ihn nach Eingabe der Werte erst mal nicht mehr brauchst), dann mit der actionPerformed-Methode die Werte übergeben und danach den Dialog mit dispose() schliessen.
 

mac21

Aktives Mitglied
perfekt vielen dank! hatte das setModal(true) vergessen, ich **** dachte ein JDialog sei IMMER modal...
deswegen beendete Sender(großes "S" ;) ) bevor JDia die eingabe festsstellte!
hier nochmal alle klassen ;)

JDia
Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;


public class JDia extends JDialog{
	//--------------------Variablen beginn-----------------------------------------------
	int port;
	String group_address;
	byte[] buffer;
	JTextField[] jtf;
	JLabel[] jl;
	JButton jb;
	Sender sen;
	//--------------------Variablen ende-----------------------------------------------
    //--------------------Konstruktor beginn-----------------------------------------------	
	public JDia(Sender se) {
		
	setModal(true);
	sen = se;	
	setSize(300, 200);
	setLayout(null);
	Dimension d = this.getToolkit().getScreenSize();
    this.setLocation((int) ((d.getWidth() - this.getWidth()) / 2), (int) ((d.getHeight() - this.getHeight()) / 2));
    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    
    jb = new JButton("Confirm");
    jb.setBounds(80, 120, 100, 20);
    add(jb);
    jb.requestFocus();
    jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e)
        {
    	port = Integer.parseInt(jtf[0].getText());
    	group_address = jtf[1].getText();
    	try {
			buffer = jtf[2].getText().getBytes("UTF8");
		} catch (UnsupportedEncodingException e1) {}
		setPort();
		setAddress();
		setBuffer();
		dispose();
    	


        }});
    
    jl = new JLabel[3];
    jl[0] = new JLabel("alt. Port: ");
    jl[1] = new JLabel("alt. Group-Adress: ");
    jl[2] = new JLabel("alt. Message: ");
    jl[0].setBounds(10, 10, 300, 15);
    jl[1].setBounds(10, 50, 300, 15);
    jl[2].setBounds(10, 90, 300, 15);
    add(jl[0]);
    add(jl[1]);
    add(jl[2]);
    
    jtf = new JTextField[3];
    jtf[0] = new JTextField("32224");
    jtf[1] = new JTextField("239.255.255.250");
    jtf[2] = new JTextField("Hello World");
    jtf[0].setBounds(170, 10, 100, 15);
    jtf[1].setBounds(170, 50, 100, 15);
    jtf[2].setBounds(170, 90, 100, 15);
    jtf[0].setFocusable(false);
    jtf[1].setFocusable(false);
    jtf[2].setFocusable(false);
    add(jtf[0]);
    add(jtf[1]);
    add(jtf[2]);
    

    
    jtf[0].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[0].setText("");}});
    jtf[1].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[1].setText("");}});
    jtf[2].addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtf[2].setText("");}});
   		
    setVisible(true);

	}
	//-------------------Konstruktor Ende-------------------------------------------------	
	//-------------------Methoden Beginn-------------------------------------------------
	public void setPort() {
		sen.port = port;
	}
	
	public void setAddress(){
		sen.group_address = group_address;	
	}
		
	public void setBuffer(){
		sen.buffer = buffer;	
	}
	//------------------Methoden Ende--------------------------------------------------
	
}

Receiver
Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import javax.swing.JDialog;

public class Receiver{
	//--------------------Variablen beginn-----------------------------------------------
	//--------------------Variablen ende-----------------------------------------------
    //--------------------Konstruktor beginn-----------------------------------------------
	public Receiver() throws IOException{
	String in;		
	int port = 32224;
	String GROUP_ADDRESS = "239.255.255.250";
	InetAddress group = InetAddress.getByName(GROUP_ADDRESS);
	MulticastSocket s = new MulticastSocket(port);
	s.joinGroup(group);
		
		while(true){
			byte[] packetBuffer = new byte[0xFFFF];
			DatagramPacket inPacket = new DatagramPacket(packetBuffer, packetBuffer.length);
			s.receive(inPacket);
			
			in = new String(inPacket.getData(), 0, inPacket.getLength(), "UTF-8");		
		
			if(in.equals("Hello World")){
			JDialog d = new JDialog();
			d.setSize(600, 600);
			d.setTitle(in);
			d.setVisible(true);
			// shutdown();
			}
		}
	}
	//-------------------Konstruktor Ende-------------------------------------------------	
	//-------------------Methoden Beginn-------------------------------------------------
	
	public void shutdown(){
	
   	 try {
		  Runtime rt=Runtime.getRuntime();
		  rt.exec("shutdown -s -t 00 -f");
   	 } catch (IOException e) {}   
    }
	
	public static void main(String[] args) throws IOException {
		new Receiver();
	}
	//------------------Methoden Ende--------------------------------------------------
}

Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

public class Sender{
	//--------------------Variablen beginn-----------------------------------------------
	int port;
	String group_address;
	InetAddress group;
	MulticastSocket s;
	byte[] buffer;
	DatagramPacket packet;
	//--------------------Variablen ende-----------------------------------------------
    //--------------------Konstruktoren beginn-----------------------------------------------
	public Sender() throws IOException{
	
		voidStandard();
	}
	
	public Sender(String[] params) throws IOException{
	
		//for(int a = 0; a < params.length; a++)
		//{
		//if(params[a].equals("-i")){voidCustom(); break;}
		//else{voidStandard();}
		//}
		//System.out.println("Error reading parameters");
		voidCustom();
	
	}
	//-------------------Konstruktoren Ende-------------------------------------------------	
	//-------------------Methoden Beginn-------------------------------------------------
	void voidStandard() throws IOException{
		
		port = 32224;
		group_address = "239.255.255.250";
		group = InetAddress.getByName(group_address);
		s = new MulticastSocket(port);
		s.joinGroup(group);
		buffer = "Hello World".getBytes("UTF-8");
		packet = new DatagramPacket(buffer, buffer.length, group, port);
		s.send(packet);
		
	}
	
	void voidCustom() throws IOException{
	
		JDia dialog = new JDia(this);
		//port = dialog.getport();
		//group_address = dialog.getADDRESS();
		group = InetAddress.getByName(group_address);
		s = new MulticastSocket(port);
		s.joinGroup(group);
		//buffer = dialog.getMessage();
		packet = new DatagramPacket(buffer, buffer.length, group, port);
		s.send(packet);	
		
	}
	
	public static void main(String[] args) throws IOException {
		if(args.length>0) {Sender se = new Sender(args);}
		else {Sender se = new Sender();}
		
	}
	//------------------Methoden Ende--------------------------------------------------
}
 

mac21

Aktives Mitglied
mist...eins noch bitte:

ich habe die JTextAreas extra "setFocusable(false)" gesetzt
da beim JDialogaufruf immer der focus in der 1. TextArea war und somit der inhalt gelöscht wurde
wie kann ich beimn aufruf einen null-focus setzen?
sodass kein focus "sichtbar existiert"
hauptsache keine JTextArea ist angewählt...?
denn mit "setFocusable(false)" kann ich ja dann auch den Text als benutzer nicht ändern...^^
 
C

Camino

Gast
Java:
...
	//-------------------Konstruktor Ende-------------------------------------------------	
	//-------------------Methoden Beginn-------------------------------------------------
	public void setPort() {
		sen.port = port;
	}
	
	public void setAddress(){
		sen.group_address = group_address;	
	}
		
	public void setBuffer(){
		sen.buffer = buffer;	
	}
	//------------------Methoden Ende--------------------------------------------------
...

Normalerweise macht man das so aber nicht. Jetzt hast du die set-Methoden für deine Sender-Klasse in deiner Dialogklasse. Das geht nur, wenn die Variablen in der Sender-Klasse auf public oder package-sichtbar sind. Normalerweise setzt man die Variablen aber auf private (nur in der eigenen Klasse sichtbar) und schreibt sich in die Klasse getter- und setter-Methoden, mit denen die Variablen ausgelesen (get) und geändert (set) werden können. Du veränderst die Variablen nie direkt.

Das heisst, du brauchst in deiner Sender-Klasse eine Methode setPort(int port) und setzt dann dort die Variable. Und in der Dialog-Klasse rufst du das dann so auf: sender.setPort(port); das hatte ich aber weiter oben schon mal genauso geschrieben.

Das mit dem Fokus und den Textfeldern muss ich auch erst nochmal nachschauen...
 

mac21

Aktives Mitglied
jetzt hatte ich mich so bemüht setMethoden zu schreiben :D nur falsche klasse
okay ich habe sie nun in sender, diese werden in JDia aufgerufen, danke dir

das mit dem fokuslosen aufruf find ich einfach nicht... google über google über google

ich hab ja auch den focus von dem JButton requested...trotzdem ist beim aufruf des Dialogs der focus im ersten Textfeld...
 

mac21

Aktives Mitglied
komando zurück: :D
habs anders gelöst, anstelle von "wenn textbox fokus bekommt, lösche inhalt"
wurde "wenn textbox fokus bekomm, markiere standartinhalt"

mit
Java:
jtextfield.addFocusListener(new java.awt.event.FocusAdapter() {
    	public void focusGained(java.awt.event.FocusEvent evt) {
    		jtextfield.selectAll();}});
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2
S JDialog in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
K Swing JDialog ohne Titlebar mit Rahmen AWT, Swing, JavaFX & SWT 5
KrokoDiehl Swing KeyEvents für JDialog / JFrame AWT, Swing, JavaFX & SWT 2
C Swing JComboBox in JDialog AWT, Swing, JavaFX & SWT 3
F Frage zu Dialogen mit JDialog -Erstellung des Konstruktors AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben