aus ActionListener auf HauptFrame zugreifen

pappender

Aktives Mitglied
Hallo,

ich versuche gerade aus einem Actionlistener auf das HauptFrame zuzugreifen.

Java:
        b1.addActionListener(new ActionListener(){
           
            //JFrame mainFrame = new JFrame();
            JFrame backgroundcolorFrame = new JFrame();
           
            JLabel headerLabel;
           
            JPanel color;
           
            JButton black;
            JButton white;
            JButton yellow;
            JButton orange;
            JButton red;
            JButton green;
            JButton blue;
           
            @Override
            public void actionPerformed(ActionEvent arg0) {

               
                if(backgroundcolorFrame.isVisible()){
                    backgroundcolorFrame.dispose();
                }else{
                   
                   
                    mainFrame.tablePlanung.getSelectedRow();
                   
               
                   
                    int x = 0; y = 0; windowWidth = 110; windowHeight = 30;
                   
                    x = mainFrame.getBounds().x + b1.getBounds().x + 10;
                    y = mainFrame.getBounds().y + b1.getBounds().y + 85;   
                   
                   
                   
                    backgroundcolorFrame.setBounds(x, y, windowWidth, windowHeight);
                    backgroundcolorFrame.setUndecorated(true);
                   
                    backgroundcolorFrame.setLayout(new BorderLayout());
                   
                   
                    headerLabel = new JLabel("Standardfarben");
                    backgroundcolorFrame.add(headerLabel, BorderLayout.NORTH);
                   
                   
                   
                    color = new JPanel();
                    color.setLayout(new GridLayout(1, 5, 3, 1));
                    backgroundcolorFrame.add(color);
                   
                    black = new JButton();
                    black.setBackground(new Color(0, 0, 0));
                   
                    white = new JButton();
                    white.setBackground(new Color(255, 255, 255));
                   
                    yellow = new JButton();
                    yellow.setBackground(new Color(255, 255, 0));
                   
                    orange = new JButton();
                    orange.setBackground(new Color(255, 153, 0));
                   
                    red = new JButton();
                    red.setBackground(new Color(255, 0, 0));
                   
                    green = new JButton();
                    green.setBackground(new Color(0, 102, 0));
                   
                    blue = new JButton();
                    blue.setBackground(new Color(0, 0, 255));
                   
                    color.add(black);
                    color.add(white);
                    color.add(yellow);
                    color.add(orange);
                    color.add(red);
                    color.add(green);
                    color.add(blue);
                   
                    backgroundcolorFrame.setVisible(true);
                   
                }
               
            }

           
        });

Also direkt mit: mainFrame.tablePlanung.getSelectedRow();
Aber irgendwie scheint die JTable "tablePlanung" nicht bekannt zu sein.
Aber das mainFrame ist doch auch bekannt.
Warum denn tablePlanung nicht?
 

pappender

Aktives Mitglied
tablePlanung ist in einem anderen Actionlistener:

Java:
        menubarEplanOperationplan.addActionListener(new ActionListener() {
          
          
          
          
          
            JTabbedPane tabbedpaneEplan;
            JPanel tabbedpaneEplanPlanung;
            JPanel tabbedpaneEplanForecast;
          
            JToolBar toolbar;
          
            private JTable tablePlanung;
            DefaultTableModel tablePlanungModel;
          
            JScrollPane scrollpaneEplanPlanung;
          
            Connection conn;
            Statement stmt;
          
          
            @Override
            public void actionPerformed(ActionEvent e) {
              
                // Registerkarten
                tabbedpaneEplan = new JTabbedPane(JTabbedPane.BOTTOM,JTabbedPane.SCROLL_TAB_LAYOUT);
                tabbedpaneEplanPlanung = new JPanel(new BorderLayout());
                tabbedpaneEplanForecast = new JPanel(new BorderLayout());
                tabbedpaneEplan.addTab("Planung", tabbedpaneEplanPlanung);
                tabbedpaneEplan.addTab("Forecast", tabbedpaneEplanForecast);
              
                // Tabelle
                tablePlanungModel = new DefaultTableModel();
              
                final String hostname = "localhost";
                final String port = "3306";
                final String dbname = "xxx";
                final String user = "xxx";
                final String password = "xxx";
          
                conn = null;
          
                try {
                      Class.forName("com.mysql.jdbc.Driver").newInstance();
                }
                catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, "Fehler: " +  e1);
                }
              
                try {
                  
                    String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
                    conn = DriverManager.getConnection(url, user, password);
                  
                    stmt = conn.createStatement();
                    String sqlEplan = new String();
                    sqlEplan = "SELECT xxx";
                    //System.out.println(sqlEplan);
                    ResultSet rs = stmt.executeQuery(sqlEplan);
                  
                    // Tabellenkopf
                    Object[] tableColumnsName = new Object[65];
                    tableColumnsName[0] = "Std";
                    tableColumnsName[1] = "Mitarbeiter";
                    tableColumnsName[2] = "AZ-Verteilung";
                    int z = 3;
                    for(int i = 1; i <= 31; i++){
                        tableColumnsName[z] = (i + ".");
                        tableColumnsName[z + 1] = ("real");
                        z = z + 2;
                    }
                    tablePlanungModel.setColumnIdentifiers(tableColumnsName);
                  
                    // Tabellendaten
                    Object[] tabledata = new Object[65];
                    String ma_name = new String();
                    while(rs.next()){
                        if (ma_name.equals(rs.getString("ma_name"))) {
                            tabledata[0] = "";
                            tabledata[1] = "";
                        }else{
                            tabledata[0] = rs.getString("ma_stdav_bezeichg");
                            tabledata[1] = rs.getString("ma_name");
                        }
                        tabledata[2] = rs.getString("prj_name_short");
                        tablePlanungModel.addRow(tabledata);
                        ma_name = rs.getString("ma_name");
                    }
                  
                  
                    rs.close();
                    stmt.close();
                    conn.close();
                  
                }
                catch (SQLException sqle) {
                    JOptionPane.showMessageDialog(null, "SQLException: " + sqle.getMessage() + "\nSQLState: " + sqle.getSQLState() + "\nVendorError: " + sqle.getErrorCode());
                }
              
              
                tablePlanung = new JTable();
                tablePlanung.setFont(new Font("Arial", Font.PLAIN, 16));
                tablePlanung.setRowHeight(21);
                tablePlanung.setModel(tablePlanungModel);
                tablePlanung.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                tablePlanung.getTableHeader().setResizingAllowed(false);
                tablePlanung.getTableHeader().setReorderingAllowed(false);
                tablePlanung.setDefaultRenderer(Object.class, new MyTableCellRenderer());
              
                TableColumn col1 = tablePlanung.getColumnModel().getColumn(0);
                col1.setPreferredWidth(45);
                TableColumn col2 = tablePlanung.getColumnModel().getColumn(1);
                col2.setPreferredWidth(155);
                TableColumn col3 = tablePlanung.getColumnModel().getColumn(2);
                col3.setPreferredWidth(120);
              
                for(int z = 3; z < 65; z++){
                    tablePlanung.getColumnModel().getColumn(z).setPreferredWidth(38);
                }
               
                scrollpaneEplanPlanung    = new JScrollPane(tablePlanung,
                        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                scrollpaneEplanPlanung.getVerticalScrollBar().setUnitIncrement(30);
                scrollpaneEplanPlanung.getHorizontalScrollBar().setUnitIncrement(100);
                tabbedpaneEplanPlanung.add(scrollpaneEplanPlanung);
              
                toolbar = new JToolBar();
              
                toolbar.add(b1);
                toolbar.add(b2);
              
              
              
                tabbedpaneEplanPlanung.add( toolbar, BorderLayout.PAGE_START );
              
              
                mainFrame.getContentPane().add(tabbedpaneEplan);
                mainFrame.pack();
                mainFrame.setBounds(x, y, windowWidth, windowHeight);
              
            }

        });
 

pappender

Aktives Mitglied
Abgesehen von meiner Frage, kann mir ja vielleicht generell noch jemand Tipps geben. Ich bin erst seit ca. 2 Wochen mit Java unterwegs. Ich denke mein Code entspricht noch nicht wirklich der Norm.
Für Vorschläge wäre sich sehr dankbar.
 

Joose

Top Contributor
Einerseits fehlen dir noch viele viele Grundlagen. Vor allem wenn man erst vor kurzem mit Java begonnen hat ist ein UI nicht gerade die beste Wahl zum Üben. Hier werden einfach viele Grundlagen von Java als auch Grundlagen in OOP (objektorientierte Programmierung) benötigt, vor allem Grundlagen der OOP sind hier wichtig.
Daher würde ich dir raten zuerst einfache Konsolenanwendungen zu schreiben und sobald OOP besser sitzt dich wieder an UIs heranzuwagen.

Zu deinem Code: Ich finde es seltsam im anonymen ActionListener derart viel Code zu haben, vor allem einer der deine UI aufbaut. Lagere den Code in Methoden aus und rufe diese aus dem ActionListener auf. Vorteil: Deine Komponenten sind Teil deines Objektes und nicht des anonymen ActionListener Objekts.
Zu deinem Problem: Du erstellst einen anonymen ActionListener, welche Komponenten deklariert. Dein "mainFrame" Objekt hat diese Komponente aber nicht! Komponenten welche du bei mehreren Listenern brauchst solltest du als Instanzvariable vom "mainFrame" Objekt deklarieren.
 
K

kneitzel

Gast
Also ich finde Deinen Code, von dem ich nur diese kleinen Ausschnitte kenne, sehr unübersichtlich. Aber klar: Am Anfang ist das nicht so einfach und nach 2 Wochen ist sowas eigentlich auch kaum zu erwarten (Oder hast Du tiefere Erfahrung in einer anderen OO Sprache?) Ich will aber einfach einmal die Dinge, die ich so sehe, aufzeigen. (Ansonsten gebe ich Joose Recht - So UIs sind am Anfang evtl. ein schlechter Start.)

So würde ich den Code besser aufteilen. Statt alles so in eine Klasse zu zwängen kann man bestimmt alles etwas mehrere Klassen aufteilen. Also Du hast da offensichtlich mindestens ein Fenster und zusätzlich noch dieses backgroundColorFrame, das evtl. ausgelagert werden könnte.

Dann gefallen mir diese anonymen Klassen nicht so sehr. Die sind zwar recht schön, wenn es um kurze, einfache Dinge geht (Wobei da dann Lambdas auch schon in Frage kommen) aber es wird schnell unübersichtlich.

Der Aufbau könnte also sein, dass Du eine Klasse hast wie
FensterController
Diese Klasse hat dann:
- Eine Funktion zur Erstellung / Anzeige des Fensters.
- Referenzen auf Controls, die notwendig sind (JFrame undwas sonst gebraucht wird)
- hat die benötigten ActionListeners (Also implementiert die notwendigen Interfaces und in den entsprechenden Methoden hat man dann Code, dass die Source prüft und dann entsprechende Aktionen aufruft. Diese Aktionen sind dann Methoden, die klar benannt sind, so dass klar ist, was da passiert.

So eine Controller Klasse hast Du dann für jedes Fenster. Damit hast Du dann eine erste Unterteilung.

Die zweite Abtrennung können die Daten sein, die angezeigt werden. Daten landen nicht direkt im Fenster sondern immer in einem Model. (Wenn das Model nicht komplex genug ist, dann kann man die Daten auch einmal direkt hinterlegen. Aber ich wäre da etwas vorsichtiger...

Die nächste Abtrennung wäre dann der ganze Code für Datenbankzugriffe. Der hat in der Gui nichts verloren. Dafür hat man ein DataLayer. Also z.B. sowas wie einen MyDataAdapter. Dieser Adapter hat die Aufgabe, MyData Objekte (Also eine Klasse für Deine Daten) zu erstellen welche dann in dem Model vorkommen. Oder geänderte oder neu erstellte MyData Objekte können dann in die Datenbank geschrieben werden.

Schon hast Du im Nu eine Aufteilung in mehrere Klassen und alles ist da, wo es hingehört. Die Komplexität jeder einzelnen Komponente nimmt ab und Komponenten lassen sich leichter testen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E ActionListener Java Basics - Anfänger-Themen 4
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
J Array Actionlistener Java Basics - Anfänger-Themen 9
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
P Erste Schritte ActionListener Java Basics - Anfänger-Themen 2
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb ActionListener Java Basics - Anfänger-Themen 1
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
F ActionListener mit Files etc Java Basics - Anfänger-Themen 12
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
U ActionListener mit JMenuItems verknüpfen Java Basics - Anfänger-Themen 1
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
L Problem bei Java-ActionListener Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
JavaNewbie2.0 ActionListener Java Basics - Anfänger-Themen 11
Voreck Actionlistener problem Java Basics - Anfänger-Themen 1
G Im ActionListener eine "äußere" Variable verändern Java Basics - Anfänger-Themen 13
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
M public static int in ActionListener Java Basics - Anfänger-Themen 6
S actionlistener timer Java Basics - Anfänger-Themen 9
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
A Klassen Bool Actionlistener Java Basics - Anfänger-Themen 2
K Methoden ActionListener wird übersprungen Java Basics - Anfänger-Themen 3
S actionlistener Java Basics - Anfänger-Themen 29
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
J ActionListener Java Basics - Anfänger-Themen 5
A ActionListener Java Basics - Anfänger-Themen 9
R Problem mit ActionListener für Buttons Java Basics - Anfänger-Themen 5
Z ActionListener wird nicht erkannt? Java Basics - Anfänger-Themen 5
T ActionListener Source vergleichen Java Basics - Anfänger-Themen 8
T Frage zum ActionListener Java Basics - Anfänger-Themen 5
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
I ActionListener reagiert nicht Java Basics - Anfänger-Themen 6
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
D Erste Schritte Buttons mit actionlistener Problem Java Basics - Anfänger-Themen 3
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S ActionListener, Methoden und Variablen Java Basics - Anfänger-Themen 4
X Variablen Actionlistener | Variablen-namen Java Basics - Anfänger-Themen 5
G ActionListener implementieren Java Basics - Anfänger-Themen 12
T Erste Schritte Berechnete Variable im ActionListener zurückführen Java Basics - Anfänger-Themen 6
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
M Button , actionlistener Java Basics - Anfänger-Themen 11
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
M Actionlistener Java Basics - Anfänger-Themen 9
D Problem mit ausgelagertem Actionlistener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
M Klassen Durch den ActionListener das GUI einer anderen Klasse verändern Java Basics - Anfänger-Themen 8
T NullPointerException im ActionListener Java Basics - Anfänger-Themen 3
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E JMenu ActionListener reagiert nicht? Java Basics - Anfänger-Themen 6
V ActionListener in einer for-Schleife Java Basics - Anfänger-Themen 2
S Erste Schritte ActionListener auf Buttons einrichten Java Basics - Anfänger-Themen 3
M Variablen Variable lässt sich durch ActionListener nicht ändern Java Basics - Anfänger-Themen 5
P ActionListener Action Event Java Basics - Anfänger-Themen 5
L ActionListener zerschießt AnchorLayout Java Basics - Anfänger-Themen 8
D ActionListener braucht zwei Klicks auf Button??? Java Basics - Anfänger-Themen 2
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
Y Actionlistener passt nicht zu Dataset Java Basics - Anfänger-Themen 6
W Problem mit FileWriter / ActionListener Java Basics - Anfänger-Themen 6
F actionListener Java Basics - Anfänger-Themen 3
T ActionListener auslagern Java Basics - Anfänger-Themen 14
S Actionlistener funktionieren nicht in der .jar Java Basics - Anfänger-Themen 9
E ActionListener abwarten lassen? Java Basics - Anfänger-Themen 11
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
H ActionListener Verbesserung möglich? (This) Java Basics - Anfänger-Themen 3
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
V ActionListener bei vielen Modulen Java Basics - Anfänger-Themen 3
J ActionListener Java Basics - Anfänger-Themen 2
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4
S ActionListener Java Basics - Anfänger-Themen 4
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
K Actionlistener Java Basics - Anfänger-Themen 7
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
A ActionListener im JMenu - Problem Java Basics - Anfänger-Themen 2
M ActionListener reagiert nicht Java Basics - Anfänger-Themen 4
N ActionListener + GUI Java Basics - Anfänger-Themen 8
H Bewegtes Bild im ActionListener [Problem] Java Basics - Anfänger-Themen 12
D Liste+ActionListener Java Basics - Anfänger-Themen 6
L wie Jframe an ActionListener übergeben Java Basics - Anfänger-Themen 4
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
Luk10 Problem mit ActionListener Java Basics - Anfänger-Themen 6
R Viereck zeichnen über TextField-Eingabe /ActionListener Java Basics - Anfänger-Themen 9
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
C ActionListener problem Java Basics - Anfänger-Themen 4
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben