Methode will nicht tun, was sie soll

Status
Nicht offen für weitere Antworten.

zilti

Bekanntes Mitglied
Wenn ein Eintrag in der Liste ausgewählt wird, wird folgendes ausgeführt:
Code:
JComboBox selected = (JComboBox)e.getSource();
                String kategorie = (String)selected.getSelectedItem();
                showNews(kategorie);
                selected.setEnabled(false);
showNews:
Code:
    public void showNews(String kategorie)
    {
        // Knopf, Zeile 3, Spalte 2
        JButton newEntry = new JButton("Neuen Newsbeitrag erstellen");
        c = new GridBagConstraints();
        c.gridx = 1;
        c.gridy = 2;
        c.gridwidth = 2;
        content.add(newEntry, c);
        
        // Schleife für die Einträge
        // Abrufen der Einträge
        db db = new db();
        db.connect("lyrionch_news");
        ResultSet rs = db.getData("news", "SELECT * FROM news WHERE Kategorie='" + kategorie + "'");
        int length = 0;
        try {
            // Abrufen der Länge
            rs.last();
            length = rs.getRow() - 1;
            rs.first();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        // Definition String
        String[] newstitles = new String[length + 1];
        newstitles[0] = kategorie + ":";
        // Schleife zum Auslesen
        for(int i=1; i<length; i++)
        {
            try
            {
            rs.next();
            newstitles[i] = rs.getString("Titel") + " (" + rs.getString("Datum") + ")";
            }
            catch (SQLException e) { e.printStackTrace(); }
        }
        // Definition der JComboBox
        JComboBox selectednews = new JComboBox(newstitles);
        selectednews.setActionCommand("showEntry");
        selectednews.addActionListener(this);
        c = new GridBagConstraints();
        c.gridx = 3;
        c.gridy = 2;
        content.add(selectednews, c);
    }
showNews wird jedoch nicht ausgeführt - warum auch immer. Einmal hatte es (zufälligerweise?) geklappt, aber seit dem habe ich einiges daran herumgewurschtelt.
 
und warum um alles in der Welt postest du dann die showNews()-Operation?
hat irgendeine der tollen 46 Zeilen etwas mit dem Problem zu tun?

ersetze doch
showNews(kategorie);
durch
System.out.println("Hello World");
oder gar
System.out.println("gewählte Kategorie: "+kategorie);

wäre es dann nicht immer noch das gleiche Problem?
('wird nicht ausgeführt')

-------

warum der Listener nicht ausgeführt wird ist nicht zu erkennen,
poste ein vollständig laufendes Programm mit dem Fehler,
dann kann man den Fehler genau benennen
 
Code:
package frames;

import frames.*;
import lyrion.*;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import methods.db;

public class Newsadmin extends JFrame implements ActionListener {
    
    ResultSet rs;
    JPanel content;
    JButton closewindow;
    Datacontainer data;
    GridBagConstraints c;
    JLabel titel;
    
    public Newsadmin(Datacontainer data) {
        super();
        this.data = data;
        db db = new db();
        if(data.getAdminrank().equals("0")) {
            System.exit(0);
        }
        // Layout
        content = new JPanel(new GridBagLayout());
        content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        this.add(content);
        this.setPreferredSize(new Dimension(640, 480));
        this.setTitle("Lyrion Admin - Newsadministration");
        
        // Aufteilung in 3 Spalten
        // ZEILE 1
        // Überschrift, Spalten 1 & 2
        titel = new JLabel("Lyrion Admin - Newsadministration     User: " + data.getUsername());
        c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        c.gridwidth = 2;
        content.add(titel, c);
        
        // Schliessen-Button, Spalte 3
        closewindow = new JButton("Schliessen");
        closewindow.setActionCommand("closeWindow");
        closewindow.addActionListener(this);
        c = new GridBagConstraints();
        c.anchor = GridBagConstraints.FIRST_LINE_END;
        c.gridx = 3;
        c.gridy = 0;
        content.add(closewindow, c);
        
        // Zeile 2
        // Label
        c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth = 3;
        content.add(new JLabel("Willkommen in der Newsadministration! Kategorie: "), c);
        // Auswahlfeld für Kategorie
        JComboBox category = null;
        try {
            category = getCategories();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        c = new GridBagConstraints();
        c.gridx = 3;
        c.gridy = 1;
        category.setActionCommand("Kategorieauswahl");
        category.addActionListener(this);
        content.add(category, c);
        // Ende
        
        content.setVisible(true);
        this.setVisible(true);
        this.pack();
        
    }
    
    public JComboBox getCategories() throws SQLException
    {
        db db = new db();
        db.connect("lyrionch_news");
        ResultSet rs = db.getData("categorysettings", "SELECT * FROM categorysettings");
        int length = 0;
        try {
            // Abrufen der Länge
            rs.last();
            length = rs.getRow() - 1;
            rs.first();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String[] categories = new String[length + 1];
        categories[0] = "";
        int i = 1;
        while(rs.next())
        {
            categories[i] = rs.getString("Name");
            i++;
        }
        JComboBox combobox = new JComboBox(categories);
        db.disconnect();
        return combobox;
        
    }
    
    // Auflisten der Einträge und des Knopfes zum Erstellen eines Eintrags
    public void showNews(String kategorie)
    {
        // Knopf, Zeile 3, Spalte 2
        JButton newEntry = new JButton("Neuen Newsbeitrag erstellen");
        c = new GridBagConstraints();
        c.gridx = 1;
        c.gridy = 2;
        c.gridwidth = 2;
        content.add(newEntry, c);
        
        // Schleife für die Einträge
        // Abrufen der Einträge
        db db = new db();
        db.connect("lyrionch_news");
        ResultSet rs = db.getData("news", "SELECT * FROM news WHERE Kategorie='" + kategorie + "'");
        int length = 0;
        try {
            // Abrufen der Länge
            rs.last();
            length = rs.getRow() - 1;
            rs.first();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        // Definition String
        String[] newstitles = new String[length + 1];
        newstitles[0] = kategorie + ":";
        // Schleife zum Auslesen
        for(int i=1; i<length; i++)
        {
            try
            {
            rs.next();
            newstitles[i] = rs.getString("Titel") + " (" + rs.getString("Datum") + ")";
            }
            catch (SQLException e) { e.printStackTrace(); }
        }
        // Definition der JComboBox
        JComboBox selectednews = new JComboBox(newstitles);
        selectednews.setActionCommand("showEntry");
        selectednews.addActionListener(this);
        c = new GridBagConstraints();
        c.gridx = 3;
        c.gridy = 2;
        content.add(selectednews, c);
    }
    
    
    
    
    public void actionPerformed(ActionEvent e) 
    {
        // Wenn ein Button angeklickt wurde
        if(e.getSource() instanceof JButton) 
        {
            if(e.getActionCommand().equals("closeWindow")) 
            {
                this.setVisible(false);
            }
        }
        // Wenn ein Eintrag aus dem Auswahlfeld gewählt wurde
        if(e.getSource() instanceof JComboBox)
        {
            if(e.getActionCommand().equals("Kategorieauswahl"))
            {
                JComboBox selected = (JComboBox)e.getSource();
                String kategorie = (String)selected.getSelectedItem();
                showNews(kategorie);
                selected.setEnabled(false);
            }
        }
    }
    
}
 
macht dir das Spass, das Programm so zu posten?

a. mit unbekannten Klassen (db usw)
b. mit unnötigen Layout und anderen Details
c. OHNE den extrem klärenden Tipp, den ich gegeben habe?

das gleiche Programm:
Code:
public class Newsadmin extends JFrame implements ActionListener {

	public Newsadmin() {
		JPanel content = new JPanel();
		this.getContentPane().add(content);

		JComboBox category = getCategories();
		category.setActionCommand("Kategorieauswahl");
		category.addActionListener(this);
		content.add(category);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(new Dimension(640, 480));
		this.setVisible(true);
		this.pack();
	}

	public JComboBox getCategories() {
		String[] categories = new String[] { "a", "b" };
		JComboBox combobox = new JComboBox(categories);
		return combobox;
	}

	public void showNews(String kategorie) {
		System.out.println("showNews: " + kategorie);
	}

	public void actionPerformed(ActionEvent e) {
		// Wenn ein Eintrag aus dem Auswahlfeld gewählt wurde
		if (e.getSource() instanceof JComboBox) {
			if (e.getActionCommand().equals("Kategorieauswahl")) {
				JComboBox selected = (JComboBox) e.getSource();
				String kategorie = (String) selected.getSelectedItem();
				showNews(kategorie);
				selected.setEnabled(false);
			}
		}
	}

	public static void main(String[] args) {
		new Newsadmin();
	}
}
läuft tadellos, 10 Min. meiner Zeit dahin, viel Spass noch..
 
Logisch funktioniert es, du Hirni, showNews() funzt ja nicht! Und dass du dafür ganze 10 Minuten brauchst, ist ja nicht mein Problem, hat dir niemand gesagt, dass du den funktionierenden Teil ausführen sollst.
 
zilti hat gesagt.:
Logisch funktioniert es, du Hirni, showNews() funzt ja nicht! Und dass du dafür ganze 10 Minuten brauchst, ist ja nicht mein Problem, hat dir niemand gesagt, dass du den funktionierenden Teil ausführen sollst.
Die heutige Jugend hat ja einen Ton an sich :wink: . Ich bin zwar selbst erst 16, aber sowas würd ich nie schreiben. Außerdem wäre wohl eher Dankbarkeit angebracht, wenn sich jemand kostenlos 10 Minuten seiner Lebenszeit nimmt, um dein ungenau geschildertes Problem zu lösen.
 
JPKI hat gesagt.:
Die heutige Jugend hat ja einen Ton an sich :wink: . Ich bin zwar selbst erst 16, aber sowas würd ich nie schreiben. Außerdem wäre wohl eher Dankbarkeit angebracht, wenn sich jemand kostenlos 10 Minuten seiner Lebenszeit nimmt, um dein ungenau geschildertes Problem zu lösen.

Das wird er spätestens bei seinen nächsten Beiträgen merken - da antwortet nämlich niemand mehr. Den Nick merken sich alle.
 
Meine Stellungname:
1. Er hat selber herumgemotzt, und das auch nicht gerade freundlich: "macht dir das Spass, das Programm so zu posten?

a. mit unbekannten Klassen (db usw)
b. mit unnötigen Layout und anderen Details
c. OHNE den extrem klärenden Tipp, den ich gegeben habe? " -> Welchen Tipp?
Und dann diesen Satz:"läuft tadellos, 10 Min. meiner Zeit dahin, viel Spass noch.." -> Ist das etwa nett?? Und wer lesen kann, der merkt doch, dass ich gesagt habe, dass es funktioniert, aber showNews(kategorie) nicht, wer da 10 Minuten braucht und das Zeug ausführt, ist selbst schuld, es soll Leute geben, die können lesen!
"um dein ungenau geschildertes Problem zu lösen."->Wie gesagt, wer lesen kann, sieht, dass das Problem genau genug beschrieben ist.
" Außerdem wäre wohl eher Dankbarkeit angebracht, wenn sich jemand kostenlos 10 Minuten seiner Lebenszeit nimmt,"->1. Habe ich das verlangt? 2. Er hat die 10 Minuten für etwas gebraucht, was ich gar nicht haben wollte und ist zu einem bereits bekannten Ergebnis gekommen (nämlich, dass es funktioniert).
 
zilti hat gesagt.:
showNews wird jedoch nicht ausgeführt - warum auch immer. Einmal hatte es (zufälligerweise?) geklappt, aber seit dem habe ich einiges daran herumgewurschtelt.
=> Es geht nicht

Er hat die 10 Minuten für etwas gebraucht, was ich gar nicht haben wollte und ist zu einem bereits bekannten Ergebnis gekommen (nämlich, dass es funktioniert).
=> hmm es geht? Was war dann überhaupt dein Problem?

Wie vereinbarst du die beiden Sätze von dir?
 
@ zilti:
Mit keiner Silbe erwähnst du auch nur eine konkrete Frage. Oder kann ich jetzt auch nicht lesen? Deine Fehlerbeschreibung begnügt sich mit "Methode will nicht tun, was sie soll". Ist das aussagekräftig? Und schon kommen wir zum Nächsten. Threads mit solchen schwachsinnigen Betreffs werden grundsätzlich erst mal hinten dran gestellt. Selbst schuld, wenn derjenige, der sich doch erbarmt zu helfen, ein wenig genervt ist.

Und, um noch ein ganz wichtiges Detail zu erwähnen: Wer wollte denn was von wem? SlaterB hat in meinen Augen völlig korrekt gehandelt. -Manche lernen es eben nie-
 
ich weise auf gerne wieder auf meine feine inhaltliche Art des Motzens hin 😉

ich bemängele nur deine Art der Aufgabenstellung/ Mitarbeit,
würde dich nie 'Hirni' nennen

Gegengemotze a la 'warum schreibst du so aggressiv' akzeptiere ich gerne,
bringt jedoch die Aufgabenlösung nicht voran
(mein Gemotze hilft da immer)
 
Thanks guys! This Thread made my day!

Yummi, und jetzt Popcorn.

Achja, ich will natürlich auch sinnvoll zum Thema beitragen:

@zilti:
Ich kann lesen - und habe mir Dein Post ordentlich durchgelesen. Daher möchte ich hier alle Deine konkreten Fragen beantworten:







Gruß,
NTB
 
Ich glaube, folgendes ist deutlich genug:
"showNews wird jedoch nicht ausgeführt - warum auch immer. Einmal hatte es (zufälligerweise?) geklappt, aber seit dem habe ich einiges daran herumgewurschtelt."
 
Also wenn ich aus dem Code deines 2ten Posts das ganze DB-spezifische Zeug entferne und am Ende der Methode showNews() ein validate(); einfüge, funktioniert es.

Edit: aber das hat SlaterB ja auch schon gemacht sehe ich gerade
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben