PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Swing: Textlabel von ausserhalb ansteuern



Overlord04
06-05-2005, 15:39
Hi,

habe eine Frage. Folgendes Problem: Ich erstelle in Swing ein Frame und möchte diesem dann Textfelder etc. hinzufügen. Das soll alles dann in die setElements-Methode (siehe Codebeispiel). Nur wie kann ich diese Textfelder etc. dann von ausserhalb, ner anderen Klasse oder so, ansteuern, sprich den Inhalt verändern und dann wieder updaten ?
Danke schon mal im Voraus



public class LiveTicker extends JFrame {

static class JFrameShower implements Runnable {
final JFrame frame;

public JFrameShower(JFrame frame) {
this.frame = frame;
EventQueue.invokeLater(this);
}

public void run() {
frame.setVisible(true);
}
}




public LiveTickerGUI() {

super("LiveTicker");
// Make sure we have nice window decorations.
setDefaultLookAndFeelDecorated(false);

// Set up the window
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
setSize(700, 350);

GridBagLayout gridBag = new GridBagLayout();
getContentPane().setLayout(gridBag);
setElements();
}

public static void main(String[] args) {

LiveTicker ticker = new LiveTicker();
new JFrameShower(ticker);
}

public void setElements()
{
GridBagConstraints c = new GridBagConstraints();
JTextField test = new JTextField("Test");
getContentPane().add(test,c);
}
}

anda_skoa
06-05-2005, 17:38
Du könntest alle Textfelder in einem Array oder eine ArrayList speichern und dann Methoden zum setzen von Text machen.

Ciao,
_

Overlord04
07-05-2005, 23:43
Hi,

danke schon ma für Deine Antwort.
Aber geht das nicht irgendwie einfacher ? Ich meine mit Array und so hört sich ziemlich umständlich an.
Kann man nicht die Textfelder irgendwie anders anlegen, dass man von aussen dran kommt ? bzw. das Frame irgendwie ??

anda_skoa
08-05-2005, 12:23
Du kannst natürlich auch direkt die ContentPane des Frames nach ihren Components fragen (siehe java.awt.Container)

Allerdings finde ich den direkten Zugriff wesentlich einfacher als über zwei Ecken und mit Casts zu arbeiten.

Ciao,
_

mwanaheri
09-05-2005, 09:25
Andere Möglichkeit:
definiere entweder die Textfelder vorab in der Klasse als public oder gib der Klasse eine public-Methode mit, die z.B. den Text der Labels setzt.

So etwa:

public class LiveTicker extends JFrame{

public JTextfield tfTest;

...

public void setFields{
GridBagConstraint c = new GridbagConstraint();
tfTest = new JTextField("test");
getContentPane().add(test,c);
}
}

oder:
public class LiveTicker extends JFrame{
private JTextField tfTest;
...
public setTestText(String t){
tfTest.setText(t);
}
...
public void setFields{
GridBagConstraint c = new GridbagConstraint();
tfTest = new JTextField("test");
getContentPane().add(test,c);
}
}