Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo liebe Forencommunity. Da ich ein Problem bei meinem Programm habe wende ich mich hoffnungsvoll an euch.
Ich habe im Hauptfenster einige ToggleButtons, dieses Hauptfenster ist immer geöffnet. Wenn ich auf einen togglebutton klicke wird ein anderes jFrame aufgerufen und bei erneutem Klick geschlossen. Soweit funktioniert es. Jedoch wenn ich so ein geöffnetes Fenster per Klick schließe (X) dann weiß ich nicht wie ich an die jToggleButtons im Hauptfenster rankomme. Denn diese sollten dann nicht mehr eingerastet, also aktiviert sein, also will ich sie mit jToggleButton1.doClick(); deaktivieren.
Normalerweise mache ich es immer so:
Java:
Mainframe mainframe = new Mainframe();
mainframe.veraendereButtons();
Das geht aber nicht da ich in mainframe selbst auch eine Verlinkung zu dem jFrame habe. Ich will also einen ToggleButton im Hauptfenster verändern wenn ich bspw. das jFrame "database" schließe. Das windowevent habe ich bereits überschrieben und eine "Ersatzmethode" erstellt, nur weiß ich jetzt nicht wie ich die Togglebuttons verändern kann. Über jegliche Hilfe wäre ich sehr dankbar.
Außerdem wollte ich euch noch eine 2. Frage stellen. Gibt es eine Möglichkeit diesen grau-punktierten-selektierand abzuschalten. Den den man immer hat wenn man auf einem Button/Table/List klickt und den man mit .requestFocus(); wegbekommt. Gibt es eine Möglichkeit diesen generell auszuschalten/auszublenden?
Jeder Button ist doch eindeutig mit einem JFrame verbdunden, also kannst du jedem JFrame seinen zugehörigen Button im Konstruktor übergeben. Dadurch kannst du in windowClosing leicht auf den Button zugreifen.
Eventuell musst du sogar nicht ständig neue Fenster erstellen, wenn ein Button geklickt wird - du könntest sie einfach unsichtbar machen und dann wieder sichtbar machen. Natürlich müsstest du dann, sofern gewünscht, Größe und Position wiederherstellen, allerdings wären dann eventuelle Eingaben gesichert, falls man dochmal auf das kleine X kommt...aber das nur so am Rande.
Java:
public class MyFrame extends JFrame implements WindowListener {
JToggleButton b;
public MyFrame(JToggleButton b){
this.b = b;
...
}
public void windowClosing(WindowEvent e){
//Hier kannst du dich um den Button und andere Dinge kümmern
}
}
Genau so meinte ich, nur würde ich die JToggleButtons nicht übergeben sondern im Mainframe von außen den Listener an "database" (Imho schlechter Name, DatabaseFrame oder DatabaseIoFrame wäre besser) hängen.
Wir reden aneinander vorbei. Tut mir leid wenn ich manchmal bei Programmierbegriffen bisserl schwach bin. Ich erklärs einfach nochmal
Ich habe 4 Klassen. Eine Hauptklasse, welche drei verschiedene Fenster (Frames, Klassen) mit 3 ToggleButtons per setVisible "öffnet". In dieser Hauptklasse klicke ich auf einen togglebutton, ein anderes jFrame öffnet sich:
Java:
public class Mainframe extends javax.swing.JFrame {
Einstellungen einstellungen = new Einstellungen();
Statistiken statistiken = new Statistiken();
Database database = new Database();
public Mainframe{...}
private void jToggleButton3MouseReleased(java.awt.event.MouseEvent evt) {
if (button1 == true) {
button1 = false;
database.setVisible(false);
} else {
button1 = true;
database.setVisible(false);
}
}
Java:
public Database() {
initComponents();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
exit();
}
});
}
void exit() {
// hier möchte ich auf mainframe zugreifen
}
In database existiert ein Windowlistener, welche die Methode exit in database aufruft wenn das X geklickt wird. Durch diese Methode soll dann in die Hauptklasse zugegriffen werden und genau hier ist mein Problem, denn das schaffe ich nicht. Ich will also in der exit-Methode von dem einen (noch geöffnetem) jFrame in dem mainframe einen Button umlegen.
Ich weiß jetzt nicht ob es an mir lag oder nicht, ich habe die Lösung jedenfalls. Es ging um eine "einfache" Referenz zwischen 2 Klassen. Wenn der ToggleButton geklickt wurde öffnet sich ein Fenster, ein anderes jFrame. Wird das Fenster geschlossen soll der Togglebutton erneut geklickt werden. Die 2 Klassennamen lauten: Mainframe und Database.
Ich post hier mal den Code, vll. hat ja jemand dasselbe Problem und es hilft. Die Einrückungen sind nicht so gelungen aber das dürfte mehr oder weniger egal sein.
Achja, @Volvagia: Was ist ein Packagepfad? Dachte das ist sowas hier: package XY; Falls du etwas anderes meinst, wirds wohl Netbeans von selbst erstellt haben. In der Schule benutzen wir Netbeans zum Programmieren deswegen verwende ich es auch privat. Und das sind wohl oder übel ein paar Dinge dabei die ich nach 2 Jahren noch nicht verstehe. (Und nein, es ist kein Schulprojekt, weil ich das gerade in den Regeln gelesen habe )
Genau so meinte ich, nur würde ich die JToggleButtons nicht übergeben sondern im Mainframe von außen den Listener an "database" (Imho schlechter Name, DatabaseFrame oder DatabaseIoFrame wäre besser) hängen.
class MyWindowAdapter extends WindowAdapter{
private JToggleButton button;
public MyWindowAdapter(JToggleButton button){
this.button = button;
}
public void windowClosing(WindowEvent e){
button.doClick();
}
}
Das hat den Vorteil, das Code aus der Klasse Database verschwindet und alles übersichtlicher wird, da der Listener sich auch wiederverwenden lässt.
Dem erzeugten JFrame wird lediglich über
Vielen Dank für diese ausführliche Erklärung Wieder etwas gelernt, denn dieser Weg wäre mir wohl als Letztes eingefallen, obwohl er in meinem Fall wohl der Beste gewesen wäre.