Announcement

Collapse
No announcement yet.

dynamische Textfelder anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dynamische Textfelder anzeigen

    Hallo zusammen,

    Ich habe eine Oberfläche mit einer Liste. Zu jedem Eintrag in der Liste kann es mehrere verknüpfte Datensätze geben, die ich mit einer Methode aus der Datenbank hole.
    Dann durchlaufe ich diese Liste mit einer for-Schleife und möchte die verknüpften Datensätze anzeigen, indem ich in der Schleife neue Textfelder erzeuge. Dazu verwende ich folgenden Code:

    Code:
    for(int i=0;i<liste.getSize();i++){
    editorPanel.add(new JTextField("TEXT AUS DEM GELADENEN OBJEKT"))
    }
    Das läuft auch alles ohne Fehler durch nur leider werden die TextFields nicht angezeigt. Kann ich die momentan angezeigte Oberfläche nicht zur Laufzeit verändern?

    UPDATE:
    Ich habe mal mit System.out.println die Anzahl der Elemente auf dem Panel Ausgaben lassen (getComponentCount()). Scheinbar werden die Textfields angelegt. Nur warum sehe ich sie dann nicht?

    Danke im Voraus und Gruß
    Timo
    Zuletzt editiert von Timo Gutsche; 12.05.2011, 09:48.

  • #2
    Es wäre sinnvoller die Ausgabe in einer JTable vorzunehmen
    Nur warum sehe ich sie dann nicht?
    Was für ein Layout hat das Panel?
    Christian

    Comment


    • #3
      Hi,
      Erstmal danke für die sehr schnelle Antwort.

      Ja, an die JTabel hatte ich auch schon gedacht. Aber die Nutzer sollen die einzelnen Datensätze bearbeiten können. Würde das auch mit iner Tabelle gehen?

      Das Panel hat GridBagLayout.
      Muss ich denn nach dem Hinzufügen der Componenten noch irgendwie sagen, dass er das GUI refreshen soll oder so?

      Gruß
      Timo

      Comment


      • #4
        Ja, an die JTabel hatte ich auch schon gedacht. Aber die Nutzer sollen die einzelnen Datensätze bearbeiten können. Würde das auch mit iner Tabelle gehen?
        Ja

        Dann musst du die Felder dem Layout hinzufügen
        http://download.oracle.com/javase/tu...t/gridbag.html

        editorPanel.add(new JTextField("TEXT AUS DEM GELADENEN OBJEKT"),new GridBagConstraints())


        Einfacher wäre es, ein NULL-Layout zu verwenden und dann alle Objekte mit setBound zu positionieren.

        editorPanel.setLayout(null);
        editorPanel.add(Dein_Textfield);
        Dein_Textfield.setBounds(x, y, width, height);

        Nachteil ist, dass sich dieses Layout dann nicht mehr an der Fenstergröße anpasst
        Christian

        Comment


        • #5
          Hallo,

          Das habe ich schon versucht, funktioniert aber leider nicht.
          Hier mal der Code der kompletten Methode, mit der ich das ganze machen will. Die Methode wird durch einen Button aufgerufen. Die System.out.println funktionieren auch.

          Code:
          public void updateEditor(String agreementName){
          		System.out.println("Komponenten vorher: " +editorPanel.getComponentCount());
          		for(int i=0;i<manager.getLines4Name(agreementName).getSize();i++){
          			SpecialAgreementLine sl = (SpecialAgreementLine)manager.getLines4Name(agreementName).getElementAt(i);
          			
          			gbc.gridx = 0; gbc.gridy = i+1; gbc.gridwidth=1;
          			editorPanel.add(new JTextArea(sl.getAgreementText()),gbc);				
          			
          		}
          		System.out.println("Komponenten nachher: " +editorPanel.getComponentCount());	
          		
          	}
          Gruß
          Timo

          Comment


          • #6
            Code:
            GridBagConstraints gridBagConstraints;
            jTextField1 = new JTextField();
            jTextField2 = new JTextField();
            jTextField3 = new JTextField();
            jTextField4 = new JTextField();
            jTextField5 = new JTextField();
            jTextField6 = new JTextField();
            
            getContentPane().setLayout(new GridBagLayout());
            
            jTextField1.setText("jTextField1");
            getContentPane().add(jTextField1, new GridBagConstraints());
            
            jTextField2.setText("jTextField2");
            gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 1;
            getContentPane().add(jTextField2, gridBagConstraints);
            
            jTextField3.setText("jTextField3");
            gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 2;
            getContentPane().add(jTextField3, gridBagConstraints);
            
            jTextField4.setText("jTextField4");
            gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 3;
            getContentPane().add(jTextField4, gridBagConstraints);
            
            jTextField5.setText("jTextField5");
            gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 4;
            getContentPane().add(jTextField5, gridBagConstraints);
            
            jTextField6.setText("jTextField6");
            gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 5;
            getContentPane().add(jTextField6, gridBagConstraints);
            Jedes Field bekomm ein eigenes GridBagConstraints()
            Zuletzt editiert von Christian Marquardt; 08.11.2020, 12:10.
            Christian

            Comment


            • #7
              Hey...

              Das ändert doch aber ncihts daran, dass das nicht angezeigt wird. Ob ich die Constraints nun neu erzeuge oder jedes Mal überschreibe.
              Muss ich denn mein Panel irgendwie neu erzeugen danach?

              Comment


              • #8
                Hmm, habe das bisher immer so gemacht und es gar nicht anders probiert

                Das folgende Programm erzeugt dynamisch die Textfelder. Es ist nichts weiter zu tun

                Code:
                public class NewJDialog extends javax.swing.JDialog {
                
                public NewJDialog(java.awt.Frame parent, boolean modal) {
                super(parent, modal);
                setDefaultCloseOperation(WindowConstants.DISPOSE_O N_CLOSE);
                setSize(new Dimension(400, 400));
                getContentPane().setLayout(new GridBagLayout());
                GridBagConstraints gridBagConstraints;
                for (int i = 0; i < 10; i++) {
                JTextField textField = new JTextField();
                textField.setText("text " + i);
                gridBagConstraints = new GridBagConstraints();
                gridBagConstraints.gridx = 0;
                gridBagConstraints.gridy = i;
                getContentPane().add(textField, gridBagConstraints);
                
                }
                
                }
                
                public static void main(String args[]) {
                java.awt.EventQueue.invokeLater(new Runnable() {
                
                public void run() {
                NewJDialog dialog = new NewJDialog(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                
                public void windowClosing(java.awt.event.WindowEvent e) {
                System.exit(0);
                }
                });
                dialog.setVisible(true);
                }
                });
                }
                }
                Mal bei dir

                i+1

                zu

                i

                ändern
                Zuletzt editiert von Christian Marquardt; 08.11.2020, 12:11.
                Christian

                Comment

                Working...
                X