| 

.NET C# Java Javascript Exception

SwingBuilder + table: Auf Zeilenänderung reagieren

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


SwingBuilder + table: Auf Zeilenänderung reagieren

Cybso - 18.02.2010 23:47
Nabend,

ich bin noch relativ neu in Groovy und schlage mich gerade mit einem Problem herum, zu dem mir Tante Google keine Antwort geben konnte.

Ich habe ein Panel mit einer Tabelle und einem Formular:

  // Stark verkürzt :-)
  dialog = swing.dialog(...) {
     splitPane {
       scrollPane {
         table {
            tableModel(list: articleData) {
              propertyColumn(header: 'Art.Nr.', propertyName: 'number', preferredWidth: 100, maxWidth: 150)
              closureColumn(header: 'Position', read: { "TODO" }, preferredWidth: 100, maxWidth: 150, resizable: false)
              propertyColumn(header: 'Titel', propertyName: 'title')
              closureColumn(header: 'Einzelpreis', read: { it.getUnitPrice() }, type: Double.class, preferredWidth: 60, maxWidth: 100)
            } // tableModel
         } // table
       } // scrollPane
       panel {
           tableLayout {
              tr {
                 td { label "Titel" }
                 td { textField(colums: 30) }
              }
              // Und noch ein paar weitere Felder
           }
       }
     } // splitPane
  } // dialog

Wenn der Benutzer nun einen Datensatz in der Tabelle anklickt, möchte ich diesen im Formular anzeigen. Doch wie verknüpfe ich diese beiden Elemente am besten miteinander? Wie kriege ich überhaupt mit, dass der Benutzer eine neue Zeile angeklickt hat?

Viele Grüße,

Roland


Re: SwingBuilder + table: Auf Zeilenänderung reagieren

Cybso - 19.02.2010 12:42
Um mir mal selbst zu antworten:

  def currentArticle = new ValueHolder()
  def articleTable

  // Stark verkürzt :-)
  dialog = swing.dialog(...) {
     splitPane {
       scrollPane {
         articleTable = table {
            tableModel(list: articleData) {
              propertyColumn(header: 'Art.Nr.', propertyName: 'number', preferredWidth: 100, maxWidth: 150)
              closureColumn(header: 'Position', read: { "TODO" }, preferredWidth: 100, maxWidth: 150, resizable: false)
              propertyColumn(header: 'Titel', propertyName: 'title')
              closureColumn(header: 'Einzelpreis', read: { it.getUnitPrice() }, type: Double.class, preferredWidth: 60, maxWidth: 100)
            } // tableModel
         } // table
       } // scrollPane
       panel {
           tableLayout {
              tr {
                 td { label "Titel" }
                 td { textField(colums: 30,  text: bind(source: currentArticle, sourceProperty: "value", converter: { it == null ? "" : it.title } )) }
              }
              // Und noch ein paar weitere Felder
           }
       }
     } // splitPane
  } // dialog

  articleTable.selectionModel.addListSelectionListener({ event ->
    def article = articleTable.model.rows[articleTable.convertRowIndexToModel(articleTable.selectedRow)]
    if (article != currentArticle.value) {
      currentArticle.value = article;
    }
  } as ListSelectionListener)

Funktioniert zwar, aber ist das so wirklich der "Groovy way"?


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "SwingBuilder + table: Auf Zeilenänderung reagieren" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.