JTextfield nach JComboBox nicht mehr beschreibbar...

Rowdy

Mitglied
Hallo zusammen,
mein Problem ist ziemlich komisch. Ich habe eine JComboBox mit 15 auswählbaren Elementen und ein JTextField, was als Eingabefenster dient. Beide sind in unterschiedlichen Panels aber sollen, wenn man einen Button drück, den eingegebenen Text, der eine Zahl sein soll, und die Position der ComboBox (also 0-14) zurückgeben, womit eine weitere Methode aufgerufen wird. Soweit klappt auch alles nur wenn ich die Combobox dann von Element 1 auf ein anderes ändere, ist es mir nicht mehr möglich das Textfeld anzulicken um etwas Neues einzugeben. Wenn ich aber die Box nicht anfasse, klappt alles, weshalb ich nicht glaube, dass es ein Programmierfehler ist, sondern irgendwas mit den verschiedenen Paneln zu tun hat aber ich bin mit meinem Latein am Ende :bahnhof:
Achja es hat auch bei einem Start alles so geklappt, wie ich das wollte aber das war einmalig.
Hoffentlich kann mir hier jemand helfen.
Gruß Rowdy
 
Kannst du nicht evtl. ein simples Beispiel bauen und hier posten? Dann kann man das besser nachvollziehen!
Ich denke nämlich schon dass es ein Programmierfehler ist 🙂
 
Java:
    private JPanel rechteSeite()
    {
        JPanel rechteSeite = new JPanel();
        GroupLayout layout = new GroupLayout(rechteSeite);
        rechteSeite.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        
        // Komponenten
       
        JButton start = new JButton("Start"); //der auslösende Button
        rechteSeite.add(start);
        start.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
        info.setMod(mod); //mod ist eine variable, die auf 1,3,6 oder 18 gesetzt werden kann
        info.methode(Integer.parseInt(eingabefenster.getText()), (auswahl.getSelectedIndex()+1));}});        
        
        // (...) es werden noch 2 Checkboxen cb1 und cb2 erstellt die mod ändern

        //Arrangement
        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addComponent(auswahl)
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(eingabefenster)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(cb1)
                        .addComponent(cb2)))
            .addComponent(start));
        
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(auswahl)
                .addComponent(eingabefenster)
                .addComponent(start))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(cb1)
                .addComponent(cb2)));
        
        return rechteSeite;
    }

eingabefenster und auswahl sind das Textfeld und die ComboBox, die mit dem Konstruktor definiert werden bzw. der ganzen Klasse zur verfügung stehen
Java:
public class GUI
{

    private Calc info = new Calc(); //die Klasse, die rechnet
    private JTextField eingabefenster;
    private int mod;
    private JComboBox auswahl;
    String[] namen;
    
    public GUI()
    {
        mod = 1;
        namen = new String[15];
        //(...)15 Eingaben für namen
        auswahl = new JComboBox(namen);
        auswahl.setSelectedIndex(0);
        eingabefenster = new JTextField();
        
        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
                
        JPanel overall = new JPanel();
        overall.setBackground(Color.white);
        frame.add(overall);

        overall.setLayout(new FlowLayout());
        overall.add(linkeSeite());
        overall.add(rechteSeite());

        frame.pack();
    }
 
Automatisch generierten Gui-Builder Code nennst du simples Beispiel? 😀
Vllt hätte ich auch noch ausführbar mit nennen sollen?
Jedenfalls hilft das vermutlich niemanden weiter, der entscheidende Code scheint ja in
info.setMod
und
info.methode

zu stecken oder?
Kannst du also nicht mal (unabhängig von deinem Code) ein ausführbares, auf das Minimale runter gebrochen, Beispiel posten? Mit nur einem Textfeld und einer Combobox, mit evtl.. nur 3-4 Items anstelle von 15 und deinen zwei Panels oder wie auch immer?
 
Nein das ist es ja also das Problem liegt nicht in den Methoden die der Klasse Calc zugrunde liegen denn wenn ich die ohne die ComboBox ausfüre also
Java:
        info.setMod(mod);
        info.methode(Integer.parseInt(eingabefenster.getText()), 1);
ohne eingebaute ComboBox, anstatt
Java:
        info.setMod(mod);
        info.methode(Integer.parseInt(eingabefenster.getText()), (auswahl.getSelectedIndex()+1));
wo ja durch die ComboBox der zweite Integer für "methode" gesetzt wird, klappt alles einwandfrei.
Wenn ich die ComboBox benutze blinkt das Fenster kurz auf und danach kann man das Textfeld eben nicht mehr "beschreiben". Ich hab deswegen so viel gepostet weil ich nicht weiß, ob das Problem in der Initialisierung und Deklarierung liegt (zweiter Java ausschnitt) oder in der Positionierung (erster Ausschnitt). Aber ich versuch mal ein kleineres Programm zu schreiben, was das gleiche Problem wiedergibt 😀
 
So hier das MiniProgramm, etwas verspätet wegen Abistress 😀 . Ist ausführbar aber wie ich meine einfach zu durchschauen.
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.Window;
import java.awt.event.*;
import java.lang.Integer.*;

public class Test
{
    //Textfeld, ComboBox und das String-Array, was der ComboBox übergeben wird
    private JTextField tf;
    private JComboBox pos;
    String[] num;
    
    public Test()
    {
        //Deklarierung von den Klassenübergreifenden Elementen
        num = new String[5];
        num[0] = "1";
        num[1] = "2";
        num[2] = "3";
        num[3] = "4";
        num[4] = "5";
        pos = new JComboBox(num);
        pos.setSelectedIndex(0);
        tf = new JTextField(16);
        
        //Frame + Panel durch die Mathode panel()
        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
        frame.add(panel());
        frame.pack();
    }
    
        private JPanel panel()
    {
        //Hier das Panel
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        
        // Komponenten
        JButton start = new JButton("Start");
        panel.add(start);
        //Der Button soll eben methode 1 mit der der Eingabe des Textfeldes und Position der ComboBox aufrufen
        start.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
        methode1(Integer.parseInt(tf.getText()), (pos.getSelectedIndex()+1));}});        
        
        //ComboBox und Textfeld hinzufügen
        panel.add(pos);
        panel.add(tf);
        
        return panel;
    }
    
    // Eine einfache Methode die einfach nur die abgerufenen Ergebnisse auswirft
    private void methode1(int eingabe, int pos)
    {
        System.out.println(eingabe + " an Stelle " + pos);
    }
}

Hab keine ausführende Methode geschrieben, startet eben alles über den Konstruktor. Hoffe das hilft weiter 🙂 einfach mal ausführen und ein bischen mit ComboBox und Textfeld spielen, dann siehst du mein Problem.
 
Einen Fehler kann ich darin nicht finden. Ausser, dass man setVisible(true) auf den Frame erst aufruft, nachdem alle Komponenten diesem hinzugefügt wurden.
Da Programm lässt sich ausführen und alle Komponenten jederzeit bedienen. Was muss man denn machen und das beschriebene Verhalten zu provozieren?
 
Bei mir tritt das immer auf wenn ich etwas ins Feld schreibe und dann die ComboBox nutze. Danach lässt sich der Text im Feld nicht mehr ändern...
 
jap genau mit dem Code, ich verstehe es auch nicht, es blinkt einmal und dann gehts nicht mehr, so als wenn er das GUI neue lädt oder so aber eben auch nur wenn ichs genau in der reihenfolge mache bzw. ist sozusagen ein Glücksspiel in wenigen Fällen klappt es ganz normal
 
Ich probiers mal morgen bei einem Kumpel aus, wenns nicht klappen sollten mach ich einfach nen Dialog auf in dem die ComboBox abgefragt wird.
Trotzdem schonmal vielen Dank für eure Hilfe 🙂
 

Neue Themen


Zurück
Oben