Jan: TextValuePair cannot resolved

Tag zusammen
Folgendes Problem. Eine App mit ComboBoxen die ich mit jbuilder erstellt hab und da auch sauber läuft, will ich nun mit einem andern tool compilieren, erhalte bei den ComboBoxen, bei denen ich werte als newTextvaluepair einfüge im titel gennannte Meldung, und der Dialog wird dann unvollständig dargestellt..

hier der Code (gekürzt auf ComboBoxen und TextValePair Klasse):
package pendenz;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;

public class dlgSuche extends JDialog {
  DB DB = new DB();

JComboBox jComboBoxTyp = new JComboBox();
  JComboBox jComboBoxPrioritat = new JComboBox();
  JComboBox jComboBoxKunde = new JComboBox();
  JComboBox jComboBoxStatus = new JComboBox();

public dlgSuche(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
      pack();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }

public dlgSuche() {
    this(null, "", false);
  }

private void jbInit() throws Exception {

panel1.setLayout(null);
    panel1.setMinimumSize(new Dimension(600, 415));
    panel1.setPreferredSize(new Dimension(600, 415));

getContentPane().add(panel1);
    panel1.add(jComboBoxTyp);
    jComboBoxTyp.setBounds(145, 85, 120, -1);

panel1.add(jComboBoxPrioritat);
    jComboBoxPrioritat.setBounds(145, 300, 120, -1);

panel1.add(jComboBoxKunde);
    jComboBoxKunde.setBounds(385, 205, 120, -1);

panel1.add(jComboBoxStatus);
    jComboBoxStatus.setBounds(385, 300, 120, -1);

}

public void setBox()
  {
    jComboBoxTyp.removeAllItems();
    jComboBoxPrioritat.removeAllItems();
    jComboBoxStatus.removeAllItems();
    jComboBoxKunde.removeAllItems();

try
    {
      Object[][] Typ = DB.GetData(1, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
      Object[][] Prioritat = DB.GetData(2, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
      Object[][] Status = DB.GetData(3, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
      Object[][] Kunde = DB.GetData(4, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");

jComboBoxTyp.addItem(new TextValuePair("", ""));
      for(int r = 0; r < Typ.length; r++)
      {
        jComboBoxTyp.addItem(new TextValuePair(Typ[r][1].toString(), Typ[r][0].toString()));
      }

jComboBoxPrioritat.addItem(new TextValuePair("", ""));
      for(int r = 0; r < Prioritat.length; r++)
      {
        jComboBoxPrioritat.addItem(new TextValuePair(Prioritat[r][1].toString(), Prioritat[r][0].toString()));
      }

jComboBoxStatus.addItem(new TextValuePair("", ""));
      for(int r = 0; r < Status.length; r++)
      {
        jComboBoxStatus.addItem(new TextValuePair(Status[r][1].toString(), Status[r][0].toString()));
      }

jComboBoxKunde.addItem(new TextValuePair("", ""));
      for(int r = 0; r < Kunde.length; r++)
      {
        jComboBoxKunde.addItem(new TextValuePair(Kunde[r][1].toString(), Kunde[r][0].toString()));
      }
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }

void jButtonSuche_actionPerformed(ActionEvent e)
  {
    dlgSuchergebnisse.tblSuchergebnisse.removeAllRows();
   dlgSuchergebnisse.setTable(jTextFieldBezeichnung.getText(), jTextAreaBeschreibung.getText(), jTextFieldStartAm.getText(), jTextFieldEndeAm.getText(), ((TextValuePair)jComboBoxPrioritat.getSelectedItem()).value, ((TextValuePair)jComboBoxTyp.getSelectedItem()).value, ((TextValuePair)jComboBoxStatus.getSelectedItem()).value,  ((TextValuePair)jComboBoxKunde.getSelectedItem()).value);
   dlgSuchergebnisse.show();
  }

void jButtonAbbrechen_actionPerformed(ActionEvent e) {
    this.hide();
  }
}

final class TextValuePair {
  final String text;
  final String value;

TextValuePair(String text, String value) {
    this.text = text;
    this.value = value;
  }
  public String toString() {
    return this.text;
  }
}

  1. Hallo,

    Folgendes Problem. Eine App mit ComboBoxen die ich mit jbuilder erstellt hab und da auch sauber läuft, will ich nun mit einem andern tool compilieren, erhalte bei den ComboBoxen, bei denen ich werte als newTextvaluepair einfüge im titel gennannte Meldung

    Die Fehlermeldung bedeutet, daß dein Compiler die Klasse TextValuePair
    nicht findet. (Wieso dein Programm dann angeblich trotzdem läuft,
    weiß ich nicht.)
    Du hast den Code von TextValuePair ja gepostet. Die Klasse existiert
    also wohl zumindest.

    Bist du sicher, daß die Klasse im selben Package liegt wie dlgSuche?
    Wenn nicht, mußt du sie noch importieren.
    Bist du sicher, daß die Klasse beim Kompilieren auch im Classpath
    liegt? Wenn nicht, mußt du sie noch dazu hinzufügen.

    Gruß
    Slyh

    1. Hi, Eclipse hat sie (warum auch immer) selbst gelöscht, ich hab sie jetzt wieder rein getan. jetzt komt die meldung: Multiple Markers at this line, Textvaluepair already definded.

      die Klasse TextValuePair hab ich im gleichen file wie dlgSuche (genau so wie oben) das hat Jbuilder akzeptiert. soll ich denn ein TextValuePair.java machen??

      1. Hallo,

        die Klasse TextValuePair hab ich im gleichen file wie dlgSuche (genau so wie oben) das hat Jbuilder akzeptiert. soll ich denn ein TextValuePair.java machen??

        Ja. Eclipse mag es nicht, wenn du mehrere Klassen in einer Datei hast.

        Gruß
        Slyh

        1. Ok, Dann Probier ich das mal. Wie muss ich es dann importieren?
          vielen Dank

          1. Hallo,

            Ok, Dann Probier ich das mal. Wie muss ich es dann importieren?

            Mach doch einfach mal. Wenn du's in's selbe Package machst, mußt du eh
            nix importieren.
            Wenn ein Fehler angezeigt wird, dann drück Strg+Leertaste auf der
            unterkringelten Stelle.

            Gruß
            Slyh

            1. Habs gemacht, Es werden keine Fehler mehr angezeigt. Aber alle Fenster mit ComboBoxen werden immer noch verhax03d angezeigt

              komisch

              1. Habs gemacht, Es werden keine Fehler mehr angezeigt. Aber alle Fenster mit ComboBoxen werden immer noch verhax03d angezeigt

                komisch

                Klasse TextValuePair:

                package pendenz;

                public class TextValuePair {
                   final String text;
                   final String value;

                TextValuePair(String text, String value) {
                     this.text = text;
                     this.value = value;
                   }
                   public String toString() {
                     return this.text;
                   }
                 }

                1. Hier mal ein vollständiger dialog der falsch angezeigt wird. ausser den Labels mit Rahmen und einigen (nicht allen) TextFields wird nichts angezeigt:

                  package pendenz;

                  import java.awt.*;
                  import javax.swing.*;
                  import javax.swing.border.*;
                  import java.awt.event.*;

                  public class dlgMitarbeiter extends JDialog {
                    DB DB = new DB();
                    dlgFehler dlgFehler = new dlgFehler();

                  JPanel panel1 = new JPanel();
                    JLabel jLabelPersonalnummer = new JLabel();
                    Border border1;
                    TitledBorder titledBorder1;
                    JLabel jLabelPN = new JLabel();
                    JTextField jTextFieldPersonalnummer = new JTextField();
                    JLabel jLabelMitarbeiter = new JLabel();
                    Border border2;
                    TitledBorder titledBorder2;
                    JLabel jLabelName = new JLabel();
                    JTextField jTextFieldName = new JTextField();
                    JLabel jLabelVorname = new JLabel();
                    JTextField jTextFieldVorname = new JTextField();
                    JLabel jLabelKontakt = new JLabel();
                    Border border3;
                    TitledBorder titledBorder3;
                    JLabel jLabelTel = new JLabel();
                    JLabel jLabelMail = new JLabel();
                    JTextField jTextFieldTel = new JTextField();
                    JTextField jTextFieldMail = new JTextField();
                    JButton jButtonSpeichern = new JButton();
                    JButton jButtonAbbrechen = new JButton();

                  public dlgMitarbeiter(Frame frame, String title, boolean modal) {
                      super(frame, title, modal);
                      try {
                        jbInit();
                        pack();
                      }
                      catch(Exception ex) {
                        ex.printStackTrace();
                      }
                    }

                  public dlgMitarbeiter() {
                      this(null, "", false);
                    }

                  private void jbInit() throws Exception {
                      this.setTitle("Pendenz-Verwaltung | Mitarbeiter erfassen");
                     border1 = BorderFactory.createLineBorder(SystemColor.controlShadow,1);
                      titledBorder1 = new TitledBorder(border1,"Personalnummer");

                  border2 = BorderFactory.createLineBorder(SystemColor.controlShadow,1);
                      titledBorder2 = new TitledBorder(border2,"Mitarbeiter");

                  border3 = BorderFactory.createLineBorder(SystemColor.controlShadow,1);
                      titledBorder3 = new TitledBorder(border3,"Kontakt");

                  panel1.setLayout(null);
                      this.setResizable(false);

                  panel1.setMinimumSize(new Dimension(595, 270));
                      panel1.setPreferredSize(new Dimension(595, 270));

                  jLabelPersonalnummer.setBorder(titledBorder1);
                      jLabelPersonalnummer.setText("");

                  jLabelPN.setToolTipText("Personalnummer:");
                      jLabelPN.setText("Pers. Num:");

                  jLabelMitarbeiter.setBorder(titledBorder2);
                      jLabelName.setText("Name:");
                      jLabelVorname.setText("Vorname:");
                      jTextFieldVorname.setText("");
                      jTextFieldName.setText("");

                  jLabelKontakt.setBorder(titledBorder3);
                      jLabelKontakt.setText("");
                      jLabelTel.setToolTipText("Telefonnummer:");
                      jLabelTel.setText("Tel. Nr:");
                      jLabelMail.setText("Email:");
                      jTextFieldTel.setText("");
                      jTextFieldMail.setText("");

                  jButtonSpeichern.setText("Speichern");
                      jButtonSpeichern.addActionListener(new dlgMitarbeiter_jButtonSpeichern_actionAdapter(this));
                      jButtonAbbrechen.setText("Abbrechen");
                      jButtonAbbrechen.addActionListener(new dlgMitarbeiter_jButtonAbbrechen_actionAdapter(this));
                      getContentPane().add(panel1);

                  jLabelMitarbeiter.setBounds(15, 15, 270, 100);
                      panel1.add(jLabelMitarbeiter);

                  jLabelKontakt.setBounds(15, 125, 270, 100);
                      panel1.add(jLabelKontakt);

                  jLabelPN.setBounds(330, 50, -1, -1);
                      panel1.add(jLabelPN);

                  jLabelPersonalnummer.setBounds(305, 15, 270, 75);
                      panel1.add(jLabelPersonalnummer);

                  jTextFieldPersonalnummer.setBounds(390, 50, 120, 20);
                      panel1.add(jTextFieldPersonalnummer);

                  jLabelName.setBounds(40, 50, -1, -1);
                      panel1.add(jLabelName);

                  jTextFieldName.setBounds(100, 50, 120, -1);
                      panel1.add(jTextFieldName);

                  jLabelVorname.setBounds(40, 75, -1, -1);
                      panel1.add(jLabelVorname);

                  jTextFieldVorname.setBounds(100, 75, 120, -1);
                      panel1.add(jTextFieldVorname);

                  jLabelTel.setBounds(40, 160, -1, -1);
                      panel1.add(jLabelTel);

                  jLabelMail.setBounds(40, 185, -1, -1);
                      panel1.add(jLabelMail);

                  jTextFieldTel.setBounds(100, 160, 120, 20);
                      panel1.add(jTextFieldTel);

                  jTextFieldMail.setBounds(100, 185, 120, 20);
                      panel1.add(jTextFieldMail);

                  jButtonSpeichern.setBounds(455, 240, 120, 20);
                      panel1.add(jButtonSpeichern);

                  jButtonAbbrechen.setBounds(325, 240, 120, 20);
                      panel1.add(jButtonAbbrechen);

                  }

                  void jButtonAbbrechen_actionPerformed(ActionEvent e) {
                      jTextFieldName.setText("");
                      jTextFieldTel.setText("");
                      jTextFieldVorname.setText("");
                      jTextFieldPersonalnummer.setText("");
                      jTextFieldMail.setText("");
                      this.hide();
                    }

                  void jButtonSpeichern_actionPerformed(ActionEvent e) {
                      String Personalnummer = jTextFieldPersonalnummer.getText();
                      if(jTextFieldPersonalnummer.getText().equals(""))
                      {
                        Personalnummer = "0";
                      }
                      try {
                        DB.SetData(17, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                                   "", "", "", "", Personalnummer,
                                   jTextFieldMail.getText(), jTextFieldTel.getText(),
                                   jTextFieldName.getText(), jTextFieldVorname.getText());
                      }    catch(Exception ex) {
                        ex.printStackTrace();
                      }
                      jTextFieldName.setText("");
                      jTextFieldTel.setText("");
                      jTextFieldVorname.setText("");
                      jTextFieldPersonalnummer.setText("");
                      jTextFieldMail.setText("");

                  }
                  }

                  class dlgMitarbeiter_jButtonAbbrechen_actionAdapter implements java.awt.event.ActionListener {
                    dlgMitarbeiter adaptee;

                  dlgMitarbeiter_jButtonAbbrechen_actionAdapter(dlgMitarbeiter adaptee) {
                      this.adaptee = adaptee;
                    }
                    public void actionPerformed(ActionEvent e) {
                      adaptee.jButtonAbbrechen_actionPerformed(e);
                    }
                  }

                  class dlgMitarbeiter_jButtonSpeichern_actionAdapter implements java.awt.event.ActionListener {
                    dlgMitarbeiter adaptee;

                  dlgMitarbeiter_jButtonSpeichern_actionAdapter(dlgMitarbeiter adaptee) {
                      this.adaptee = adaptee;
                    }
                    public void actionPerformed(ActionEvent e) {
                      adaptee.jButtonSpeichern_actionPerformed(e);
                    }
                  }

                  1. Problem erkannt: null-Layout kennt -1-1 (automatisch an inhalt anpasssen) von xylayout net.
                    vielen dank für eure hilfe :)

              2. Hallo,

                tja, dann hast du wohl noch irgendwo nen Fehler.
                Debuggen hilft.

                Gruß
                Slyh

                1. Hallo,

                  tja, dann hast du wohl noch irgendwo nen Fehler.
                  Debuggen hilft.

                  Gruß
                  Slyh

                  Ich glaub ich weis jetzt woran es liegt. Ich hab ein Rahmen-Label. und dann wohl einige TextFields drunter statt drüber und diese sind deshalb nicht mehr sichtbar...
                  ist das möglich? oder sind immer alle sichtbar wenn nicht disabled?

        2. Hi Slyh,

          Ja. Eclipse mag es nicht, wenn du mehrere Klassen in einer Datei hast.

          ????
          Welche Version?
          Wie äußert sich diese Antipathie bei Dir?

          D.h., du kannst keinerlei Quellcode mit nested classes verwenden?

          Viele verwunderte Grüße,
          Martin

          1. Hallo,

            Ja. Eclipse mag es nicht, wenn du mehrere Klassen in einer Datei

            D.h., du kannst keinerlei Quellcode mit nested classes verwenden?

            Hehe, ich hätte die Einschränkung bzgl. Nested Classes doch dazuschreiben
            sollen. :-)

            Nested Classes müssen natürlich nicht in einer eigenen Datei liegen.
            Aber da gehört ja die Klasse auch zu einer umschließenden Klasse.
            (Ich hoffe, wir verstehen unter "nested classes" dasselbe.)

            Gemeint war das Definieren mehrere Klassen innerhalb einer Datei.

            Beispiel:

            public class A
            {
            }

            public class B
            {
            }

            Eclipse beschwert sich hier, und sagt, daß Klasse "B" in einer
            eigenen Datei definiert werden muß.

            Interessanterweise kommt die Meldung nicht, wenn man das "public"
            wegläßt, die Klasse also einen Package-Scope kriegt.

            Und woran liegt das? Nun, eine public-Klasse muß in einer Datei
            gleichen Namens definiert sein. Eine Klasse im Package-Scope darf
            überall stehen.

            Das wußte ich nicht. Schon hab ich wieder was dazugelernt. *g*

            Gruß
            Slyh

            1. Hi Slyh,

              Nested Classes müssen natürlich nicht in einer eigenen Datei liegen.
              Aber da gehört ja die Klasse auch zu einer umschließenden Klasse.
              (Ich hoffe, wir verstehen unter "nested classes" dasselbe.)

              Ich habe mich da auch länger verwirren lassen ;-))

              Spezifikation 8.1.2:
              "An inner class is a nested class that is not explicitly or implicitly declared static."

              D.h., die statischen "innewohnenden" Klassen sind dann halt "nur" nested Klassen. Hast Du eine passende Übersetzung dafür?

              Interessanterweise kommt die Meldung nicht, wenn man das "public"
              wegläßt, die Klasse also einen Package-Scope kriegt.

              Aus Spezifikation 8:
              "A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class."

              Also:

              public Class A {

              public static class B { // nested class
                 }
              }

              public Class A {
              }
              class B { // top-level class
              }

              Aus Spezifikation 7.6:
              "When packages are stored in a file system (§7.2.1), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:

              • The type is referred to by code in other compilation units of the package in which the type is declared.
                ********
              • The type is declared public (and therefore is potentially accessible from code in other packages)."
                ********

              Die Fehlermeldung rührt also daher, dass mehr als eine Top-Level Klasse mit dem Access Modifier "public" in der selben Compilation Unit definiert ist, und dies oben zitierter Spezifikation (7.6) widerspricht.
              Wenn dem nicht so wäre, hätte der Compiler (bzw. Classloader) vermutlich auch Schwierigkeiten, das einem derart referenzierten Typ entsprechende Source-File zu finden (zumindest auf File-basierten VM-Implementierungen) ;-)

              Viele Grüße,
              Martin

  2. Hi,

    was ist nun die _exakte_ Fehlerbeschribung?
    Ein Darstellungsfehler (aber kein Compile-Fehler) oder ein Compile-Fehler?

    Viele Grüße,
    Martin Jung

    1. Hi,

      was ist nun die _exakte_ Fehlerbeschribung?
      Ein Darstellungsfehler (aber kein Compile-Fehler) oder ein Compile-Fehler?

      Viele Grüße,
      Martin Jung

      Ein DarstellungsFehler, Es werden nur noch einige Labels und die TextArea dargestellt. Die Klasse TextValuePair hab ich in verschiedenen Java-files im gleichen Package, und es gibt noch ide Warnung: Miultiple £Markers at this Line
      Typ TextValuePair is already defined