# Bindings, dynamische Verbindung (Vorbau mit Netbeans)



## Ocean-Driver (10. Mrz 2008)

Hallo,


Ich habe eine automatisch-generierte DB-Anwendung (Netbeans).
Jetzt gibts ja die Savemethode, die folgendes ausführt:


```
entityManager.getTransaction().commit();
        entityManager.getTransaction().begin();
```


Jetzt würde ich gern an einer Stelle statt einem normalen Feld eine ComboBox nutzen, da diese Date naus einer anderen Tabelle holt. wie kann ich das realisieren?danke!


Was ich sonst noch gern wissen, wie kann ich die Verbindung zur Datenbank dynamisch machen?Ich will ja die Verbindung nicht schon vorher angeben müssen.

Außerdem würde ich an einer Stelle gerne eine ComboBox statt einem TextField nehmen, da dort nur Daten aus einer bestimmten Spalte aus einer bestimmten Tabelle angegebven werden dürfen.

Wie realisiere ich das mit dem Binding? 




gruß
ocean-driver


----------



## Ocean-Driver (10. Mrz 2008)

keiner ne idee?


----------



## SlaterB (10. Mrz 2008)

die Frage ist etwas ungenau, 
was meinst du mit 'automatisch-generierte DB-Anwendung (Netbeans)',
hast du das komplette Programm als Quelltext und willst es nun beliebig modifizieren oder fragst du nach irgendwelchen Netbeans-Einstellungen?

> statt einem normalen Feld eine ComboBox nutzen, da diese Date naus einer anderen Tabelle holt. wie kann ich das realisieren?

was soll man dazu sagen? programmiere ne JComboBox, evtl. auch die JTable falls sie fehlt usw.
falls du dich damit noch nicht auskennst musst du viele Seiten Tutorial/ Lehrbuch lesen,
da kann man erstmal nix beitragen

> wie kann ich die Verbindung zur Datenbank dynamisch machen?Ich will ja die Verbindung nicht schon vorher angeben müssen. 

definiere näher, was die Verbindung ausmacht,
wenn du irgendwelche Strings wie Server-Namen meinst,
dann baue dir entsprechende Textfelder oder was auch immer,
alles ist möglich

> Außerdem würde ich an einer Stelle gerne eine ComboBox statt einem TextField nehmen

dann mal los

> Wie realisiere ich das mit dem Binding? 

was genau? du musst dich natürlich allgemein mit JComboBoxen auskennen,
siehe z.B.
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html


----------



## Ocean-Driver (11. Mrz 2008)

Hallo,


Es gibt in Netbeans die Möglichkeiten ein Fenster mit einer JTable, Textfields, buttons 'generieren' zu lassen. Diese Seite spiegelt dann immer eine Tabelle in der Datenbank wieder.

Jetzt habe ich an einer Stelle ja ein TextField (was automatisch generiert ist).  Dies soll jedoch durch eine ComboBox ersetz werden. Doch in der Savemethode wird nur EntityManager aufgerufen:


```
entityManager.getTransaction().commit();
        entityManager.getTransaction().begin();
```


Ich weiß jedoch nicht, wie ich so statt dem Feld die ComboBox ansteuern soll. Hier mal die Klasse: 


```
package mediaverwaltung;

import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class HoerbuchmedienView extends JPanel {
    
    public HoerbuchmedienView() {
        initComponents();
        TableSelectionListener listener = new TableSelectionListener();
        masterTable.getSelectionModel().addListSelectionListener(listener);
        entityManager.getTransaction().begin();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        entityManager = javax.persistence.Persistence.createEntityManagerFactory("medienverwaltungPU").createEntityManager();
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(mediaverwaltung.MediaverwaltungApp.class).getContext().getResourceMap(HoerbuchmedienView.class);
        query = entityManager.createQuery(resourceMap.getString("query.query")); // NOI18N
        list = org.jdesktop.observablecollections.ObservableCollections.observableList(query.getResultList());
        hoerbuchmedienQuery = entityManager.createQuery("SELECT h FROM Hoerbuchmedien h");
        hoerbuchmedienList = hoerbuchmedienQuery.getResultList();
        medientypenQuery = entityManager.createQuery("SELECT m FROM Medientypen m");
        medientypenList = medientypenQuery.getResultList();
        masterScrollPane = new javax.swing.JScrollPane();
        masterTable = new javax.swing.JTable();
        titelLabel = new javax.swing.JLabel();
        jahrLabel = new javax.swing.JLabel();
        medientypLabel = new javax.swing.JLabel();
        tonformatLabel = new javax.swing.JLabel();
        firmaLabel = new javax.swing.JLabel();
        anzahlLabel = new javax.swing.JLabel();
        preisLabel = new javax.swing.JLabel();
        beschreibungLabel = new javax.swing.JLabel();
        titelField = new javax.swing.JTextField();
        jahrField = new javax.swing.JTextField();
        tonformatField = new javax.swing.JTextField();
        firmaField = new javax.swing.JTextField();
        anzahlField = new javax.swing.JTextField();
        preisField = new javax.swing.JTextField();
        beschreibungField = new javax.swing.JTextField();
        saveButton = new javax.swing.JButton();
        refreshButton = new javax.swing.JButton();
        newButton = new javax.swing.JButton();
        deleteButton = new javax.swing.JButton();
        medientypField = new javax.swing.JTextField();
        
        /*
        List medientypen = entityManager.createNativeQuery("select fname from Medientypen").getResultList();
        
        for(int i=0; i < medientypen.size();  i++)
        {
            medientypen.get(i).toString().replace("[", "");
            medientypField.addItem(medientypen.get(i));
        }*/
        

        FormListener formListener = new FormListener();

        setName("Form"); // NOI18N

        masterScrollPane.setName("masterScrollPane"); // NOI18N

        masterTable.setName("masterTable"); // NOI18N

        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, hoerbuchmedienList, masterTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${titel}"));
        columnBinding.setColumnName("Titel");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${jahr}"));
        columnBinding.setColumnName("Jahr");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${medientyp}"));
        columnBinding.setColumnName("Medientyp");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${tonformat}"));
        columnBinding.setColumnName("Tonformat");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${firma}"));
        columnBinding.setColumnName("Firma");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${anzahl}"));
        columnBinding.setColumnName("Anzahl");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${preis}"));
        columnBinding.setColumnName("Preis");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${beschreibung}"));
        columnBinding.setColumnName("Beschreibung");
        columnBinding.setColumnClass(String.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        masterScrollPane.setViewportView(masterTable);

        titelLabel.setText(resourceMap.getString("titelLabel.text")); // NOI18N
        titelLabel.setName("titelLabel"); // NOI18N

        jahrLabel.setText(resourceMap.getString("jahrLabel.text")); // NOI18N
        jahrLabel.setName("jahrLabel"); // NOI18N

        medientypLabel.setText(resourceMap.getString("medientypLabel.text")); // NOI18N
        medientypLabel.setName("medientypLabel"); // NOI18N

        tonformatLabel.setText(resourceMap.getString("tonformatLabel.text")); // NOI18N
        tonformatLabel.setName("tonformatLabel"); // NOI18N

        firmaLabel.setText(resourceMap.getString("firmaLabel.text")); // NOI18N
        firmaLabel.setName("firmaLabel"); // NOI18N

        anzahlLabel.setText(resourceMap.getString("anzahlLabel.text")); // NOI18N
        anzahlLabel.setName("anzahlLabel"); // NOI18N

        preisLabel.setText(resourceMap.getString("preisLabel.text")); // NOI18N
        preisLabel.setName("preisLabel"); // NOI18N

        beschreibungLabel.setText(resourceMap.getString("beschreibungLabel.text")); // NOI18N
        beschreibungLabel.setName("beschreibungLabel"); // NOI18N

        titelField.setName("titelField"); // NOI18N

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.titel}"), titelField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), titelField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        jahrField.setName("jahrField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.jahr}"), jahrField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), jahrField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        tonformatField.setName("tonformatField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.tonformat}"), tonformatField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), tonformatField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        firmaField.setName("firmaField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.firma}"), firmaField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), firmaField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        anzahlField.setName("anzahlField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.anzahl}"), anzahlField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), anzahlField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        preisField.setName("preisField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.preis}"), preisField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), preisField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        beschreibungField.setName("beschreibungField"); // NOI18N

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.beschreibung}"), beschreibungField, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), beschreibungField, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        saveButton.setText(resourceMap.getString("saveButton.text")); // NOI18N
        saveButton.setName("saveButton"); // NOI18N
        saveButton.addActionListener(formListener);

        refreshButton.setText(resourceMap.getString("refreshButton.text")); // NOI18N
        refreshButton.setName("refreshButton"); // NOI18N
        refreshButton.addActionListener(formListener);

        newButton.setText(resourceMap.getString("newButton.text")); // NOI18N
        newButton.setName("newButton"); // NOI18N
        newButton.addActionListener(formListener);

        deleteButton.setText(resourceMap.getString("deleteButton.text")); // NOI18N
        deleteButton.setEnabled(false);
        deleteButton.setName("deleteButton"); // NOI18N
        deleteButton.addActionListener(formListener);

        medientypField.setName("medientypField"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(newButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(deleteButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(refreshButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(saveButton))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(titelLabel)
                            .addComponent(jahrLabel)
                            .addComponent(medientypLabel)
                            .addComponent(tonformatLabel)
                            .addComponent(firmaLabel)
                            .addComponent(anzahlLabel)
                            .addComponent(preisLabel)
                            .addComponent(beschreibungLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(titelField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(jahrField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(tonformatField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(firmaField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(anzahlField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(preisField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(beschreibungField, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                            .addComponent(medientypField, javax.swing.GroupLayout.Alignment.TRAILING, 0, 315, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(masterScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE)))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteButton, newButton, refreshButton, saveButton});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(masterScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(titelLabel)
                    .addComponent(titelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jahrLabel)
                    .addComponent(jahrField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(medientypLabel)
                    .addComponent(medientypField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tonformatLabel)
                    .addComponent(tonformatField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(firmaLabel)
                    .addComponent(firmaField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(anzahlLabel)
                    .addComponent(anzahlField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(preisLabel)
                    .addComponent(preisField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(beschreibungLabel)
                    .addComponent(beschreibungField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(saveButton)
                    .addComponent(refreshButton)
                    .addComponent(deleteButton)
                    .addComponent(newButton))
                .addContainerGap())
        );

        bindingGroup.bind();
        
        
        
    }

    // Code for dispatching events from components to event handlers.

    private class FormListener implements java.awt.event.ActionListener {
        FormListener() {}
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if (evt.getSource() == saveButton) {
                HoerbuchmedienView.this.saveButtonActionPerformed(evt);
            }
            else if (evt.getSource() == refreshButton) {
                HoerbuchmedienView.this.refreshButtonActionPerformed(evt);
            }
            else if (evt.getSource() == newButton) {
                HoerbuchmedienView.this.newButtonActionPerformed(evt);
            }
            else if (evt.getSource() == deleteButton) {
                HoerbuchmedienView.this.deleteButtonActionPerformed(evt);
            }
        }
    }// </editor-fold>                        
    
    private class TableSelectionListener implements ListSelectionListener {
        
        public void valueChanged(ListSelectionEvent e) {
            if (e.getSource() == masterTable.getSelectionModel()) {
                boolean enabled = (masterTable.getSelectedRow() != -1);
                deleteButton.setEnabled(enabled);
            }
        }
        
    }
    
    private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
        entityManager.getTransaction().rollback();
        entityManager.getTransaction().begin();
        list.clear();
        list.addAll(query.getResultList());
    }                                             
    
    private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        
        if(JOptionPane.showConfirmDialog(null, "Datensatz wirklich löschen?", "Datensatz löschen?", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
        {
        
        int[] selected = masterTable.getSelectedRows();
        List<mediaverwaltung.Hoerbuchmedien> toRemove = new ArrayList<mediaverwaltung.Hoerbuchmedien>(selected.length);
        for (int idx=0; idx<selected.length; idx++) {
            mediaverwaltung.Hoerbuchmedien h = list.get(masterTable.convertRowIndexToModel(selected[idx]));
            toRemove.add(h);
            entityManager.remove(h);
        }
        list.removeAll(toRemove);
        }
    }                                            
    
    private void newButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
        mediaverwaltung.Hoerbuchmedien h = new mediaverwaltung.Hoerbuchmedien();
        entityManager.persist(h);
        list.add(h);
        int row = list.size()-1;
        masterTable.setRowSelectionInterval(row, row);
        masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true));
    }                                         
    
    private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
       
        if(!titelField.getText().equals(""))
        {
        entityManager.getTransaction().commit();
        entityManager.getTransaction().begin();
        
        refreshButtonActionPerformed(null);
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Titel darf nicht leer sein!" );
        }

    }                                          
    
    
    // Variables declaration - do not modify                     
    private javax.swing.JTextField anzahlField;
    private javax.swing.JLabel anzahlLabel;
    private javax.swing.JTextField beschreibungField;
    private javax.swing.JLabel beschreibungLabel;
    private javax.swing.JButton deleteButton;
    private javax.persistence.EntityManager entityManager;
    private javax.swing.JTextField firmaField;
    private javax.swing.JLabel firmaLabel;
    private java.util.List<mediaverwaltung.Hoerbuchmedien> hoerbuchmedienList;
    private javax.persistence.Query hoerbuchmedienQuery;
    private javax.swing.JTextField jahrField;
    private javax.swing.JLabel jahrLabel;
    private java.util.List<mediaverwaltung.Hoerbuchmedien> list;
    private javax.swing.JScrollPane masterScrollPane;
    private javax.swing.JTable masterTable;
    private javax.swing.JTextField medientypField;
    private javax.swing.JLabel medientypLabel;
    private java.util.List<mediaverwaltung.Medientypen> medientypenList;
    private javax.persistence.Query medientypenQuery;
    private javax.swing.JButton newButton;
    private javax.swing.JTextField preisField;
    private javax.swing.JLabel preisLabel;
    private javax.persistence.Query query;
    private javax.swing.JButton refreshButton;
    private javax.swing.JButton saveButton;
    private javax.swing.JTextField titelField;
    private javax.swing.JLabel titelLabel;
    private javax.swing.JTextField tonformatField;
    private javax.swing.JLabel tonformatLabel;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration                   
    
    public static void open() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame();
                frame.setContentPane(new HoerbuchmedienView());
                frame.setDefaultCloseOperation(frame.DISPOSE_ON_CLOSE);
                frame.pack();
                frame.setTitle("Hörbücher");
                frame.setVisible(true);
            }
        });
    }
    
}
```


----------



## SlaterB (11. Mrz 2008)

falls du auf eine Antwort von mir wartest:
ich wiederhole gerne nochmal, dass du erst lernen musst, wie man selber eine GUI programmiert,
was eine JComboBox usw. ist,

natürlich kannst du hier auch gerne fragen, ob das jemand für dich programmiert oder Schritt für Schritt erklärt,
Sinn macht das aber nicht sehr viel und ist deswegen unwahrscheinlich


----------



## Ocean-Driver (11. Mrz 2008)

Hallo,

Ich habe bereits einmal eine Datenbankanwendung (grafisch) zu Fuß programmiert. Nur dieses mal wollte ich dieses spezielle System von Netbeans nutzen  um mir die Arbeit zu erleichtern. Mir ist nur nicht  klar, an welcher Stelle ich das ganze jetzt genau für die Save-Methode implementieren muss (Wie ich eine ComboBox zusammenbastele, mit Daten aus einer sql-db ist mir schon  klar)


gruß
ocean


----------



## SlaterB (11. Mrz 2008)

nun, dann kann man nochmal genauer nachdenken,

also du hast einen Save-Button, wenn man den klickt,
dann wird transaction.commit()/begin() ausgeführt,

so, und dann sprichst du immer wieder von einem TextField und einer JComboBox, die du dafür haben möchtest,
dazu meine Fragen:
1.) was hat das in irgendeiner Weise mit den Save-Button oder dessen Aktion zu tun?
2.) wenn es nix damit zu tun hat, was ist dann deine Frage dazu?


> Mir ist nur nicht klar, an welcher Stelle ich das ganze jetzt genau für die Save-Methode implementieren muss 

die Save-Methode gehöt zum Save-Button und ist anscheinend schon da und funktioniert?
was hat das mit der ComboBox zu tun?


----------



## Ocean-Driver (11. Mrz 2008)

hallo,


Es gibt für jede Spalte in der Tabelle eine Textfield.
In der Spalte "Medientyp" besteht jedoch eine Beziehung zur Spalte "Medienname" in der Tabelle "Medientypen".
Damit diese Beziehung erhalten bleibt, will ich dort statt einer Eingabe einfach eine ComboBox haben, die alle Mediennamen auflistet. 

So eine ComboBox zu bauen ist ja kein Problem, aber wenn ich jetzt ein neuen Datensatz erstellt hab und dann den Wert aus der ComboBox speichern will, hab ich natürlich ein Problem. Da ich nicht weiß wo die Savemethode Ihre daten herholt, diese ruft ja nur 

  entityManager.getTransaction().commit(); 
        entityManager.getTransaction().begin();


auf.

Weißst du jetzt was ich meine?


----------



## SlaterB (11. Mrz 2008)

eieiei, das ist ja ne komplizierte Sache,

um das Save musst du dich dann nicht kümmern, das wird die Objekte hinter der JTable speichern, wie bisher,
bleibt noch der korrekte Einbau der JComboBox IN die JTable-Spalte,

dazu kann ich nun gar nix sagen,
aber sorry dass ich dich so lange falsch verstanden habe 

wenn ich noch raten soll, dann kann ich mir gut vorstellen, dass es dem Binding egal ist, ob da eine JComboBox oder ein JTextField steht, 
ob aber dieses feste Konstukt überhaupt den Einbau einer JComboBox ermöglicht?..


----------



## Ocean-Driver (11. Mrz 2008)

Hi,


Trotzdem danke. 

Ich hab trotzdem nochmal ein anderes Problem. 
Ich hab jetzt erstmal provisorisch eine Prüfung geschrieben, die testen soll ob der eingegebende Wert in der DB auch vorhanden ist:



```
public static boolean Medientyp(String medientyp)
    {
        System.out.println("Medientypen werden überprüft");
        
        //medientyp =  "[" + medientyp + "]";
        
         System.out.println("Übergebender Medientyp formatiert:" + medientyp + "\n" + "Vorhandene Medientypen werden ausgegeben:");
        boolean gefunden=false;
        List medientypen = entityManager.createNativeQuery("select fname from Medientypen").getResultList();
    
        for(int i=0; i < medientypen.size(); i++)
        {
             System.out.println(medientypen.get(i).toString());
            if(medientypen.get(i).equals(medientyp))
            {
                i = medientypen.size();
                gefunden = true;
            }
        }
          
                
        System.out.println("Gefunden: "+ gefunden);
        return gefunden;
    }
```



Nur, er findet nie den Wert. Wenn ich mir die Werte aus der Liste hole, krieg ich die immer mit nem [] vorne und hinten. Ich habs deswegen mit und ohne: _ medientyp =  "[" + medientyp + "]";_ probiert. Was ist denn falsch?


----------



## Nadobnykh (15. Apr 2008)

Hi,

das Ding sieht folgender massen aus:

du hast ein PersistenceContext (Alle aktuell vom EntityManager verwaltete Entity-Objekte) und eine Datenbank(da wo die diese Objekte her kommen )

entityManager.getTransaction().commit();
überträgt den aktuellen Stand im PersistenceContext in die Datenbank, und zwar in Form einer Transaktion, d.h. alle Änderungen seit dem Transactionsbeginn vorgenommen worden sind werden an die DB geschickt.

Danach wird in der Save()-@Action einfachheitshalber an der gleichen Stelle eine neue Transaction gestartet:
entityManager.getTransaction().begin();

hat hier jedoch keinen Einfluss auf die SPeicherung der Daten in der Datenbank!
(sondern auf die NÄCHSTE Speicherung, die irgendwann kommt! )

In NETBEANS: Beim Binding ist zu beachten, dass die Komponente die man anklickt (in dem Fall JComboBox) eine Ziel-Komponente ist und wird an eine Quell-Komponente wie JTable oder gleich "list" (java.util.List-Objekt) angebunden!
(obwohl beim "Always sync" - Update Mode ist das meistens egal! )


----------

