Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse?

Wuast

Bekanntes Mitglied
Hi,
kann mir jemand sagen, ob es in einem der o.g. Bereichen eine Art "automatischen" Listener gibt, der Updates feuert wenn man im UI einen Reiter verschiebt?
Ich habe eine Methode, die ein neues Objekt erzeugt, welches dann mithilfe der abstract table Model in einer JTable abgebildet werden soll. Ich habe noch keinen Listener dafür implementiert, sodass auch erstmal nichts aufploppt. Wenn ich jetzt die Spalten zurechtrücke, taucht das neue Objekt dann aber "von alleine" auf.
Woran liegt das? Ich denke mal, es gibt entsprechende Listener, damit das grafisch auch abgebildet werden kann, wenn der Bumms "resizable" ist, oder? Aber warum greift das dann auch auf die Inhalte der JTable oder ATM zu (bzw. auch welche überhaupt)?
liebe Grüße Yannick
 

Oneixee5

Top Contributor
Der Effekt kommt vermutlich von deinem gewählten Layoutmanager. Wenn die Größe der Komponenten in der Anwendung geändert wird, dann muss diese neu gezeichnet werden. Wenn erst dann der gesamte Inhalt sichtbar wird, dann machst du beim Layout etwas falsch. Was genau das ist kann man aber ohne Code nicht sagen.
 

Wuast

Bekanntes Mitglied
Der Effekt kommt vermutlich von deinem gewählten Layoutmanager. Wenn die Größe der Komponenten in der Anwendung geändert wird, dann muss diese neu gezeichnet werden.
Ich habe den absolute-Layout-Typen gewählt. Oder was meinst du mit Manager?

Wenn erst dann der gesamte Inhalt sichtbar wird, dann machst du beim Layout etwas falsch.

Ich dachte eigentlich, es liegt daran, dass ich beim Programmstart einfach noch keine Inhalte habe und diese dann nach und nach erzeugt werden. Und bisher habe ich es mal wieder noch nicht geschafft, da die entsprechenden Listener korrekt zu implementieren... weswegen ich da nichts anderes erwartet hatte.

Was genau das ist kann man aber ohne Code nicht sagen.

Ich versuche mal auszuwählen, was brauchbare Infos liefert. Sonst gerne sagen, ob / was fehlt.

Java:
//Main-Klasse mit UI, enthält dann schließlich auch die Methode...
private void initialize() {
        mainFrame = new JFrame();
        mainFrame.setTitle(functions.displayMonth());   
        mainFrame.setBounds(100, 100, 629, 435);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.getContentPane().setLayout(null);
        
        JScrollPane scrollPaneForJtable = new JScrollPane();
        scrollPaneForJtable.setViewportBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
        scrollPaneForJtable.setBounds(6, 27, 623, 371);
        mainFrame.getContentPane().add(scrollPaneForJtable);
        
        TableModel atm = new ATM_4_GUI(finAdmin);
        
        informationDisplay = new JTable(atm);
    
    //...
    
    JButton buttonNewEntry = new JButton("New entry");
        buttonNewEntry.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                functions.createNewEntry();
            }
        });
        menuBar.add(buttonNewEntry);
    
    //...
    
}

public class UI_Functions {
    
    //...
    
    public void createNewEntry() {
        CashFlow cf = finAdmin.factory(displayDate(), 0, 0, 0, 0); //Objekterzeugung
        finAdmin.addCashFlow(cf);    //Objekt zur ArrayList hinzufügen
        atm.displayNewEntry(cf);    //führt zur Klasse mit der AbstractTableModel
    }
}

public class ATM_4_GUI extends AbstractTableModel {
    
    //...
    
    public void displayNewEntry(CashFlow cf) {
            int newIndex = finAdmin.getMonthlyFinances().size();   
            cashflowList.add(cf);
            fireTableRowsInserted(newIndex, newIndex);
        }
}

hier dachte ich eigentlich, dass der neue Eintrag angezeigt wird. Tut er aber nicht, also irgendetwas habe ich mal wieder noch nicht hingekriegt.
Aber wenn ich die Größe der Reiter ändere und das neu gezeichnet wird, dann tauchen das neue Objekt (aktuell leider noch 2 x) in der JTable auf.^^

Hoffe, das hilft zum Verständnis.
 

Oneixee5

Top Contributor
Offensichtlich verwendest du Swing mit Null-Layout, das ist keine gute Idee und wird dir ständig Schwierigkeiten machen: mainFrame.getContentPane().setLayout(null);
 

Wuast

Bekanntes Mitglied
Also ich arbeite ja in Eclipse und habe da den Swing-Disgner benutzt. Layout-Typ ist absolutLayout. Der Rest ist automatisch implementiert wurden.
Was würdest du denn stattdessen empfehlen?

Ich habe bei einem anderen Projekt mit dem Null-Layout nicht diese Erfahrung gemacht, da waren aber auch funktionierende / korrekte Listender dabei. Also es hat definitiv was mit dem Layout zu tun?
 

Wuast

Bekanntes Mitglied
wonach genau suche ich denn hier, also was ist mein Problem bzw. falsch an dem Code bisher? xD Das ist wieder so viel auf einmal
Das Layout ist doch im Frame allg. , oder geht es um das JTable Layout?
Java:
informationDisplay = new JTable(atm);
        informationDisplay.setColumnSelectionAllowed(true);
        informationDisplay.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
        informationDisplay.setForeground(Color.BLACK);
        informationDisplay.setBackground(new Color(224, 255, 255));
        scrollPaneForJtable.setViewportView(informationDisplay);
ein Layout konnte ich speziell für die JTable ja nicht auswählen, nur die Border..

Grundsätzlich bin ich mit der JTable ja zufrieden und die ATM funktioniert (bis auf die Listener) auch.
 

Oneixee5

Top Contributor
Was soll ich sagen, so etwas wie "Swing-Disgner" kann natürlich eine Menge Tipparbeit sparen, man muss trotzdem genau wissen was man tut. Das ist meine Empfehlung. Welcher Layoutmanager genau der Richtige für dich ist kann ich nicht sagen. Du wirst dir ja sicherlich die Programmoberfläche mal aufgemalt haben, in den verschieden Bearbeitungsstufen usw. Damit müsstest du dann eine Entscheidung treffen können.
 

Wuast

Bekanntes Mitglied
Was soll ich sagen, so etwas wie "Swing-Disgner" kann natürlich eine Menge Tipparbeit sparen, man muss trotzdem genau wissen was man tut. Das ist meine Empfehlung. Welcher Layoutmanager genau der Richtige für dich ist kann ich nicht sagen. Du wirst dir ja sicherlich die Programmoberfläche mal aufgemalt haben, in den verschieden Bearbeitungsstufen usw. Damit müsstest du dann eine Entscheidung treffen können.
Hm okay, dann muss ich mir das i-wann mal im Detail reinziehen, bringt mich aber akut nicht weiter. Grundsätzlich ist es ja auch nicht weiter störend (in meinem Fall), weil wenn ich die Listener richtig hinkriege dann tauchen die Inhalte ja ohnehin sofort auf. Ich hatte mich halt nur gefragt, ob da irgendwo ein entsprechender Mechanismus updates feuert, sobald das neu gezeichnet wird.
dachte, dass man das ja vllt. sogar für sich nutzen könnte, z.B. also "Universal-Listener" oder so, der einfach immer einmal neu zeichnet und dann automatisch Änderungen übernommen werden (sodass ich nicht für jede wünschenswerte Änderungsanzeige einen separaten Listener bräuchte).

Ja wenn es so einfach wäre, dann könnte es jeder und eine Ausbildung und Erfahrung wären nicht notwendig.
Richtig. Nur irgendwo müsste man ja mal anfangen und einen Überblick erhalten, sonst ist es ja keine geführte "Ausbildung". Leider kam das bei uns eigentlich alles so kurz, dass ich nur autodidaktisch und mithilfe des Forums lerne..
 

Wuast

Bekanntes Mitglied
Das sagt mir, dass du das Konzept hinter Listenern noch nicht verstanden hast.
Deshalb die " "; ist mir schon klar, dass das so nicht ganz richtig ist. Nennen wir es halt besser "Weg, um die Notwendigkeit, viele Listener implementieren zu müssen, zu umgehen" (für mich so ein Gedanke, weil ich das irgendwie alleine nie so richtig ans laufen kriege. Dass es dem State of the art wohl nicht entspricht, ist mir auch klar)
 

Neumi5694

Top Contributor
Naja, wenn irgend etwas bestimmtes auf irgend einen Event passieren soll, dann wirst du dafür einen Listener schreiben müssen. Java liest keine Gedankden. Sei froh drum, wäre das möglich, bräuchte es keine Programmierer mehr und wir wären arbeitslos.
 

mihe7

Top Contributor
dass man das ja vllt. sogar für sich nutzen könnte, z.B. also "Universal-Listener" oder so, der einfach immer einmal neu zeichnet und dann automatisch Änderungen übernommen werden (sodass ich nicht für jede wünschenswerte Änderungsanzeige einen separaten Listener bräuchte).
Hier muss man erstmal unterscheiden zwischen Objekt und Klasse. Natürlich kann man sich eine Klasse bauen, die als Listener für alle möglichen Ereignisse herhalten kann:

Java:
class RepaintOnEventListener implements ChangeListener, 
        PropertyChangeListener /* weitere Listener, falls gewünscht */  {
    private JComponent component;

    public RepaintOnEventListener(JComponent comp) {
        component = comp;
    }

    // Listener-Implementierungen

    public void stateChanged(ChangeEvent e) {
        repaint();
    }

    public void propertyChanged(PropertyChangeEvent e) {
        repaint();
    }

    // Helferlein

    private void repaint() {
        if (component != null) {
            component.repaint();
        }
    }
}

Dann erstellt man für die neu zu zeichnende Komponente ein Objekt dieser Klasse und registriert dieses als Listener. Das könnte man ggf. sogar noch etwas allgemeiner halten, mit einem Proxy bzw. Reflection aber das führt hier zu weit.

Die Frage ist natürlich: wo ist jetzt der Vorteil von z. B.
Java:
meinModel.addPropertyChangeListener(new RepaintOnEventListener(panelToRedraw));
// ggü
meinModel.addPropertyChangeListener(e -> panelToRedraw.repaint());
?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
B Gibt einen JComboButton? AWT, Swing, JavaFX & SWT 3
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
S Caps-Lock Überprüfung gibt falschen Wert zurück AWT, Swing, JavaFX & SWT 1
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
Z Gibt es alternativen zu Swing und AWT, Swing, JavaFX & SWT 4
C Swing JComboBox, ItemListener gibt 2x aus AWT, Swing, JavaFX & SWT 2
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
J Gibt es brauchbare GUI-Builder, oder doch besser alles per Hand machen? AWT, Swing, JavaFX & SWT 6
P gleichanfangende Zeilen solange auslesen bis es die gibt AWT, Swing, JavaFX & SWT 12
K 2D-Grafik interstectsLine gibt immer false zurück AWT, Swing, JavaFX & SWT 18
R Swing JLabel gibt stets 'null' aus AWT, Swing, JavaFX & SWT 3
D System.out.println() gibt html-Tags mit aus AWT, Swing, JavaFX & SWT 2
D Funktion JList.getSelectedValues() gibt nicht alle values zurück AWT, Swing, JavaFX & SWT 2
J Welche Fallstricke gibt es bei TreeTables in SWT/JFace AWT, Swing, JavaFX & SWT 3
G Gibt es diese Komponente? AWT, Swing, JavaFX & SWT 11
T Swing Gibt es eine Komponente für eine farbliche Editorbox? AWT, Swing, JavaFX & SWT 6
F JComboBox gibt falsche werte AWT, Swing, JavaFX & SWT 3
S JDialog gibt keine Nachrichten ueber sein Schliessen..? AWT, Swing, JavaFX & SWT 3
J Gibt es in Java ein mehrspaltiges Listenfeld? AWT, Swing, JavaFX & SWT 6
K Gibt es AWT- und Swing-ActionListener ? AWT, Swing, JavaFX & SWT 3
R Gibt es Pulldown-Buttons in Swing? AWT, Swing, JavaFX & SWT 5
J Gibt es ein OutlookTabbedPane für Java ? AWT, Swing, JavaFX & SWT 9
G Gibt's in Swing oder AWT sowas wie ein Gruppenfeld? AWT, Swing, JavaFX & SWT 3
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
V Gibt es eine JButtonBar? AWT, Swing, JavaFX & SWT 3
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
V Wie heisst dieses GUI-Element? Gibt es sowas für Swing? AWT, Swing, JavaFX & SWT 10
N JComponent#getClientProperty(key) welche Schlüssel gibt es? AWT, Swing, JavaFX & SWT 3
G Gibt es soetwas wie setPreferredWidth() für JTextPane? AWT, Swing, JavaFX & SWT 3
F gibt etwas wie frames in html auch in java? AWT, Swing, JavaFX & SWT 19
P ProgressMonitor - isCanceled gibt immer false zurück AWT, Swing, JavaFX & SWT 2
I Grafikfilter => welche gibt es und wie einsetzen AWT, Swing, JavaFX & SWT 7
C getIcon für ein File das es nicht gibt? AWT, Swing, JavaFX & SWT 2
S Gibt es sowas wie SwingEvent? AWT, Swing, JavaFX & SWT 6
R drawLine gibt hässliche linie AWT, Swing, JavaFX & SWT 4
A KeyPressed gibt mir immer 0 AWT, Swing, JavaFX & SWT 8
J Gibt es eine Methode die mir die Javaversion zurück gib ? AWT, Swing, JavaFX & SWT 2
G Gibt es eine Klasse für Syntax highlighting? AWT, Swing, JavaFX & SWT 3
S Gibt es eine Möglichkeit???? AWT, Swing, JavaFX & SWT 2
MiMa Reaktion auf einen SplitScreenTrenner? AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
S Swing GANZE Row auf einen Schlag einfärben AWT, Swing, JavaFX & SWT 2
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
L Wie realisiere ich einen Controller AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
F JavaFX Erstelle einen Wald AWT, Swing, JavaFX & SWT 6
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
P Swing RadioButtons - nur einen auswählen AWT, Swing, JavaFX & SWT 3
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
J JFrame in einen JFrame anzeigen AWT, Swing, JavaFX & SWT 2
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
M SWT /Jface Wann einen ColumnLabelProvider benutzen? AWT, Swing, JavaFX & SWT 2
-horn- WorldWindJava+JOGL soll einen animierten Graphen anzeigen, wie? AWT, Swing, JavaFX & SWT 4
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben