Hallo,
ich zeig einfach mal den Code und schildere dann das Darstellungsproblem:
Meine Hauptklasse:
Code:
import javax.swing.*;
public class Main
extends JApplet{
private MainPanel m;
public Main(){
m = new MainPanel();
this.getContentPane().add( m );
}
}
Jedes Menü erbt von JPanel:
Code:
import java.awt.event.*;
import javax.swing.*;
public class TestVocPanel
extends JPanel{
private JButton OkButton;
private JButton BackButton;
private ActionListener OnOkButton;
private ActionListener OnBackButton;
private MainPanel mp;
public TestVocPanel(){
add(OkButton=new JButton("Ok"));
add(BackButton=new JButton("Back"));
OnOkButton = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
// HIER
OkButton.hide();
BackButton.hide();
add(mp=new MainPanel());
}
};
OnBackButton = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
}
};
OkButton.addActionListener(OnOkButton);
BackButton.addActionListener(OnBackButton);
}
}
Code:
import java.awt.event.*;
import javax.swing.*;
public class MainPanel
extends JPanel
{
// Controls and Listeners:
private JButton TestVocButton;
private ActionListener OnTestVocButton;
// Class instances:
private TestVocPanel tvp;
public MainPanel(){
add(TestVocButton=new JButton("Test Vocabulary"));
// The Handlers:
OnTestVocButton = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
// HIER:
TestVocButton.hide();
tvp = new TestVocPanel();
add( tvp );
}
};
TestVocButton.addActionListener( OnTestVocButton );
}
}
Wenn ich nun in MainPanel eine instanz von der TestVocabulary Klasse erstelle und dann eigentlich die Buttons auftauchen sollten funktioniert dies erst wenn ich den Applet viewer von Eclipse minimiere und dann maximiere.
Auch der IE und opera machen es nicht anders.
Ich bitte um hilfe, muss ich irgendetwas aktualisieren?
Wenn ich das Problem zu dumm geschilert habe bitte ich euch es zu kompilieren, wäre sehr nett und ich weis nicht weiter.
Zunächst erst mal sieht der Code nicht Applet typisch aus, wichtige Methoden aus den Lebenszyklus eines Applets existieren nicht. Dann hast Du Methoden verwendet, die deprecated sind (hide()). Die solltest Du ersetzen mit setVisible(false); . Klassennamen beginnen mit einem großen Anfangsbuchstaben, Methodennamen werden klein geschrieben.
Zum eigentlichen Problem ist zu sagen: Nach dem Du die JButton zur Laufzeit auf ein JPanel hinzugefügt hast, musst Du ein Neuzeichnen anfordern. In Deiner actionPerformed()-Methode in MainPanel:
Code:
testVocButton.setVisible(false);
tvp = new TestVocPanel();
add(tvp);
validate();
Das sehe ich nicht so, schließlich musste ich Deinen Code durch sehen. Und da stolpert man schon über die Schreibweise von Klassen, Objekten und Methoden. Ich programmiere nach den Code Conventions von Sun, was auch allgemeiner Standard in der Java-Welt ist.
Klar, der Code ist von Dir, aber gib ihn mal einem anderen Programmierer, oder schau ihn Dir nach einem halben Jahr noch mal an, dann weißt Du, was ich meine.