Swing Oberfläche

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

habe ein Problem.

Das hier ist mein kleines Programm:

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


public class HelloSwingFrame
{ 


	public static void main(String[] args) {

		JFrame f = new JFrame( "Fenster" ); 
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
		f.setSize( 500, 200 ); 
		f.setVisible( true );
		f.toFront();

		JTextField t = new JTextField( 5);
		t.setSize(100,17);
		t.setLocation(10,20);
		f.add(t);


		JButton b = new JButton( "Ende" ); 
		b.setSize(100,20); 
		b.setLocation(200,150);
		f.add( b );


		ActionListener al = new ActionListener() { 
			public void actionPerformed( ActionEvent e ) { 
				System.exit( 0 ); 
			} 
		};
		
	    b.addActionListener( al ); 
	    
	    System.out.println(t.getText());

		} 
	}

Wenn ich das Prog starte gibt es 2 unterschiedliche Versionen. Manchmal kommt 1., doch meistens die 2. Version.

1. (richtige) Version:
http://img184.imageshack.us/my.php?image...irmfoto2og5.png


2. (falsche) Version:
bildschirmfoto1xz3.png


Warum ändert sich die Darstellung andauernd?


mfg
 
1.) Den Frame erst sichtbar machen, wenn die Komponenten hinzugefügt wurden.
2.) Das System.out.println(t.getText()); bringt and dieser Stelle nichts, weil in dem TextFeld zu dieser Zeit ja noch nichts eingtragen wurde
3.) Layout Manager verwenden (hier FlowLayout)

Code:
 public static void main(String[] args) {

      JFrame f = new JFrame( "Fenster" );
      f.setLayout(new FlowLayout());
      f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     

      JTextField t = new JTextField( 5);
      t.setSize(100,17);
     
      f.add(t);


      JButton b = new JButton( "Ende" );
      b.setSize(100,20);
    
      f.add( b );


      ActionListener al = new ActionListener() {
         public void actionPerformed( ActionEvent e ) {
System.out.println(t.getText());
            System.exit( 0 );
         }
      };
      
       b.addActionListener( al );
      
       
       
       f.setSize( 500, 200 );
       f.setVisible( true );
      

      }
 
ok danke an alle

wie erstelle ich jetzt ganz normalen text (JLabel?) an einer bestimmten stelle
 
entweder per LayoutManager irgendwas ausdenken (tutorials für kombinierte Layouts gibs da genug)

oder (mein persönlicher Favorite) Null-Layout, da kannste jeder Komponente ne genaue Koordinatenzuweisung geben
 
Ich rate dir das GridBagLayout genau anzuschaun. Hier gibt es einen Thread wo kurz erklärt wird welche Argumente was machen: GridBagConstraints
Null-Layout ist zwar recht einfach, jedoch wirst du Probleme bekommen wenn sich das Fenster vergrößert und für genau diese Sachen sind die Layout-Manager gedacht!
 
NullLayout ist vor allem problematisch, wenn das Fenster verkleinert wird, so gehen bei einer Änderung der Fenstergröße u. U. Elemente verloren bzw. werden nicht angezeigt.

GridBagLayout ist für Anfänger nicht gerade das einfachste, wenn es auch durchaus eine praktikable Lösung ist. Ich würde zunächst den Vorschlag von Verjigorm prüfen, ob das Verschachtel von Layouts nicht ausreichend für Dich ist.
 
ich habs jetzt mal mit Null-Layout gemacht

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



public class HelloSwingFrame
{ 


	public static void main(String[] args) {

		JFrame f = new JFrame( "Fenster" ); 
	    f.setLayout(null); 
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 

		JTextField t = new JTextField( 5);
		t.setSize(100,17);
		t.setLocation(10,20);
		f.add(t);


		JButton b = new JButton( "Ende" ); 
		b.setSize(100,20); 
		b.setLocation(200,150);
		f.add( b );
		
		JButton b2 = new JButton( "Einfügen" ); 
		b2.setSize(100,20); 
		b2.setLocation(10,40);
		f.add( b2 );



		ActionListener al = new ActionListener() { 
			public void actionPerformed( ActionEvent e ) { 
				//System.out.println(t.getText());
				System.exit( 0 ); 
			}
		};
		
	    b.addActionListener( al ); 
	    
	    
	    
	    ActionListener al2 = new ActionListener() { 
			public void actionPerformed( ActionEvent e ) { 
				String bb;
				bb=t.getText();			}
		};
		
		b2.addActionListener( al2);
	    
	    f.setSize( 500, 200 ); 
		f.setVisible( true );
	    



		} 
	}


Doch mein Eclipse zeigt einen Fehler in Zeile 49 an

Das Prog soll beendet werden, wenn ich auf Ende drücke und wenn ich auf Einfügen drücke soll der String gespeichert werden
 
Schreib vor
Code:
JTextField t = new JTextField( 5);
final hin, also:
Code:
final JTextField t = new JTextField( 5);

Das sollte deinen Fehler beheben
 
So noch eine Frage

Warum kann ich nicht etwas ins feld eintragen und die Eingabe wieder unten ausgeben?

Hier mein Programm:

Code:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.event.*; 
import javax.swing.JLabel;




public class Test {

	/**
	 * @param args
	 */
	public static String str="";
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		final JFrame f = new JFrame( "Window" ); 
		f.setLayout(null); 
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
		f.setLayout(null);
		
		final JTextField t = new JTextField( 5);
		t.setSize(100,17);
		t.setLocation(10,20);
		f.add(t);
		
		final JButton b3 = new JButton( "Einfügen" ); 
		b3.setSize(100,17);
		b3.setLocation(10,40);
		f.add(b3);
		
		final JLabel tf = new JLabel(str);
		tf.setSize(100,20);
		tf.setLocation(30,80);
		f.add(tf);
		
		ActionListener al = new ActionListener() { 
			public void actionPerformed( ActionEvent e ) { 
				str=t.getText();	

			}
		};

		b3.addActionListener( al ); 
		
		
		
		f.setSize(300,200);
		f.setVisible(true);

	}

}

Danke
 
weil du den Text dem Label erst setzen musst. Füge folgendes in die actionPerformed Methode ein:
Code:
tf.setText(t.getText());

Die Variable str benötigst du nicht.
 
Code:
       ActionListener al = new ActionListener() {
          public void actionPerformed( ActionEvent e ) {
             str=t.getText();   
             tf.setText(str);
          }
       };
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben