Swing problemer

Tags:    java

Noget af det jeg har døjet med længe er at sende en besked fra en swing frame til en anden swing frame. Måden jeg forestiller mig det skal gøres på er ved at trykke på en JButton i JFrame 1, den kalder en metode på JFrame 2 med en tekst streng som JFrame2 så udskriver i et JTextField... Problemet synes at være at jeg ønsker at gøre det mellem to swing forms, jeg kan godt gøre den mellem en AWT form og en swing form ved brugen af invokeLater metoden jvf. Sun's tutorial. Hvis der er nogen der har en løsning så vil jeg gerne se noget kode 8-)
(¯`·._.·[Brian Hvarregaard]·._.·´¯)



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Noget af det jeg har døjet med længe er at sende en besked fra en swing frame til en anden swing frame. Måden jeg forestiller mig det skal gøres på er ved at trykke på en JButton i JFrame 1, den kalder en metode på JFrame 2 med en tekst streng som JFrame2 så udskriver i et JTextField... Problemet synes at være at jeg ønsker at gøre det mellem to swing forms, jeg kan godt gøre den mellem en AWT form og en swing form ved brugen af invokeLater metoden jvf. Sun's tutorial. Hvis der er nogen der har en løsning så vil jeg gerne se noget kode 8-)
(¯`·._.·[Brian Hvarregaard]·._.·´¯)

camus filosofi

Det her virker! RammeTo.class er omtrent magen til, men minus main. Jeg prøvede først at medtage et JTextPane, men da jeg ikke lige kunne få den til at addere text strengene, så ku' det være lige meget. Den virker ikke tilbage fra ramme to til ramme et, jeg kan ikke lave en new RammeEt() i ramme to, for så vil det jo køre i en sløjfe, og en simpel ref. RammeEt re; er ikke nok.

public class RammeEt extends JFrame{
JTextField jtf = new JTextField();
JButton jb = new JButton();
RammeTo rt = new RammeTo();
BorderLayout layout;
JButton jbcl = new JButton();

public RammeEt() {
super("ramme et");
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {

jb.setText("send til ramme to");
jb.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jb_actionPerformed(e);
}
});

jbcl.setText("ryt feltet");
jbcl.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jbcl_actionPerformed(e);
}
});

layout = new BorderLayout(5, 5);
this.getContentPane().add(jtf, BorderLayout.NORTH);
this.getContentPane().add(jb, BorderLayout.CENTER);
this.getContentPane().add(jbcl, BorderLayout.SOUTH);
setSize(220, 250);
show();
}

void jb_actionPerformed(ActionEvent e) {
rt.jtf.setText(jtf.getText()); // rt.jtf = JTextField i RammeTo
}
void jbcl_actionPerformed(ActionEvent e) {
jtf.setText(" "); jtf.grabFocus();
}
public static void main(String[] args){
RammeEt re = new RammeEt();
re.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}

Hum - nej, jeg henter lige RammeTo.class også
public class RammeTo extends JFrame{
JTextField jtf = new JTextField();
JButton jb = new JButton();
BorderLayout layout;
RammeEt re;
JButton jbcl = new JButton();

public RammeTo() {
super("ramme to");
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
jb.setText("send til ramme et");
jb.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jb_actionPerformed(e);
}
});
jbcl.setText("ryd feltet");
jbcl.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jbcl_actionPerformed(e);
}
});
layout = new BorderLayout(5, 5);
this.getContentPane().add(jtf, BorderLayout.NORTH);
this.getContentPane().add(jb, BorderLayout.CENTER);
this.getContentPane().add(jbcl, BorderLayout.SOUTH);
setSize(220, 250);
show();
}
void jb_actionPerformed(ActionEvent e) {
try{
re.jtf.setText(jtf.getText());
}
catch(Exception ex){ jtf.setText(ex.toString()); }
}

void jbcl_actionPerformed(ActionEvent e) {
jtf.setText(" ");
}
}
hilsen Nils G H Waale alias nighwa



Inden jeg viser dig noget kode, må du vise mig noget kode. ;-)



Fair nok... det jeg egentligt ønsker er at have to "uafhængige" JFrames eller JPanels hvor jeg kan foretage mig noget i det ene hvorefter det slår igennem i det andet. Følgende er et simpelt kode eksempel hvor jeg har prøvet at illustrere princippet:

JFrame1, den med knappen.
Fold kodeboks ind/udKode 


Frame 2, den med tekstfeltet

Fold kodeboks ind/udKode 


Hmm.... tror jeg fik luget det meste at SUN ONE's automatisk genereret kode ud. princippet findes egentligt i actionPerformed i frame 1, hvor jeg spørger om framen i forvejen er visible. Ellers vil jeg jo få en helt ny frame hver gang. Den allerbedste løsning ville være at sætte mit tekstfelt visible i starten af koden, således jeg altid har det stående åbent og derfor kun skal koncentrere mig om at tilføje tekst deri. Håber dette er forståeligt.



(¯`·._.·[Brian Hvarregaard]·._.·´¯)



Tjaa... hvis jeg har forstået dig ret, så er her ÉN mulig løsning:

Fold kodeboks ind/udKode 


Forstår du princippet?

> Ellers vil jeg jo få en helt ny frame hver gang.

Hehe... det var jo det du gjorde med din kode...






et par rettelser så virker den begge veje.
constuctor RammeTo skal bare modtage jtf fra RammeEt som argument.

public class RammeEt extends JFrame{
JTextField jtf = new JTextField();
RammeTo rt = new RammeTo(jtf);
- - -
______________________

public class RammeTo extends JFrame{
JTextField jtf = new JTextField(); // eget felt
JTextField rejtf; // skal ikke erklæres med new, kommer fra etteren
- - -
public RammeTo(JTextfield re) {
super("ramme to");
rejtf = re;
- - -
----action--
rejtf.setText(jtf.getText());

Nils




t