Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έχω δημιουργήσει μια βάση δεδομένων με κάποιους πίνακες

Επίσης εχω κάνει μια φόρμα με ένα jtable ώστε να μου παρουσιάζει τις εγγραφές που έχει ο πίνακας όταν την ανοίγω. Αλλά όταν πάω να την κάνω run τη φόρμα παίρνω αυτο το λάθος:

 

post-163561-0-08841400-1456612899_thumb.png

 

Έχω κάνει τα entity beans έχω δημιουργήσει query querylist και entitymanager και επίσης έχω κάνει και observable τη λίστα

Επεξ/σία από christosglx
Δημοσ.
Ολο αυτο είναι το λάθος που μου πετάει

 

 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at handlersource.EmployeesFrame.initComponents(EmployeesFrame.java:36)

at handlersource.EmployeesFrame.<init>(EmployeesFrame.java:23)

at handlersource.EmployeesFrame$1.run(EmployeesFrame.java:147)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

BUILD SUCCESSFUL (total time: 2 seconds)

Δημοσ.

E ή δεν έχει γίνει initialize o EntityManager ακόμα, ή το isDesignTime σκάει. Γιατί fully qualified names; δεν βαριέσαι να γράφεις όλο τον σιδηρόδρομο;

  • Like 1
Δημοσ.

E ή δεν έχει γίνει initialize o EntityManager ακόμα, ή το isDesignTime σκάει. Γιατί fully qualified names; δεν βαριέσαι να γράφεις όλο τον σιδηρόδρομο;

 

Και πώς μπορώ να το λύσω το πρόβλημα??? Είμαι νέος στη java απ'ότι κατάλαβες. Και επίσης τί εννοείς με το fully qualified names?

Δημοσ.

Το fully qualified όνομα είναι π.χ.

new javax.swing.JButton();

new javax.swing.JFrame();

 

Το javax.swing είναι το όνομα του package στο οποίο βρίσκονται οι Κλάσεις, ενώ το JButton / JFrame είναι το όνομα των κλάσεων. Επειδή δεν έχει νόημα να γράφεις συνέχεια το όνομα των πακέτων, τα κάνεις import πάνω πάνω στη κλάση. π.χ. import javax.swing.*.

Κανονικά τα IDE αν πεις new JButton() σου φτιάχνουν τα imports μόνα τους.

 

Τώρα στο άλλο ερώτημα, πρέπει να δω όλο το κώδικα. Αλλιώς δεν μπορώ να δώ τι έχεις κάνει για να κάνεις initialize τον Entitymanager.

  • Like 1
Δημοσ.

Το fully qualified όνομα είναι π.χ.

new javax.swing.JButton();

new javax.swing.JFrame();

 

Το javax.swing είναι το όνομα του package στο οποίο βρίσκονται οι Κλάσεις, ενώ το JButton / JFrame είναι το όνομα των κλάσεων. Επειδή δεν έχει νόημα να γράφεις συνέχεια το όνομα των πακέτων, τα κάνεις import πάνω πάνω στη κλάση. π.χ. import javax.swing.*.

Κανονικά τα IDE αν πεις new JButton() σου φτιάχνουν τα imports μόνα τους.

 

Τώρα στο άλλο ερώτημα, πρέπει να δω όλο το κώδικα. Αλλιώς δεν μπορώ να δώ τι έχεις κάνει για να κάνεις initialize τον Entitymanager.

 

Αυτος ο κωδικας που αναφερεις ειναι generated απο το netbeans δεν καθομαι να τον γραψω ολο αυτο εγω :P 

Ο κωδικας της κλασης ειναι ο παρακατω:

import javax.persistence.EntityManager;
import mainPackage.DBManager;
import model.Employee;
 
/**
 *
 * @author George
 */
public class EmployeesFrame extends javax.swing.JFrame {
 
    /**
     * Creates new form EmployeesFrame
     */
    public EmployeesFrame() {
        
        initComponents();
    }
 
    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
 
        query1 = java.beans.Beans.isDesignTime() ? null : em.createQuery("select e from Employee e");
        list1 = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(query1.getResultList());
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ΔΙΑΧΕΙΡΗΣΗ ΕΡΓΑΖΟΜΕΝΩΝ");
        setBackground(new java.awt.Color(255, 255, 255));
        setBounds(new java.awt.Rectangle(200, 200, 640, 480));
        setMinimumSize(new java.awt.Dimension(640, 480));
 
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, list1, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${lname}"));
        columnBinding.setColumnName("ΕΠΩΝΥΜΟ");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${fname}"));
        columnBinding.setColumnName("ΟΝΟΜΑ");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${email}"));
        columnBinding.setColumnName("E-mail");
        columnBinding.setColumnClass(String.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        jScrollPane1.setViewportView(jTable1);
 
        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/add16.png"))); // NOI18N
        jButton1.setText("Εισαγωγή");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
 
        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/edit16.png"))); // NOI18N
        jButton2.setText("Επεξεργασία");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
 
        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/delete16.png"))); // NOI18N
        jButton3.setText("Διαγραφή");
 
        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/home22.png"))); // NOI18N
        jButton4.setText("Αρχική");
        jButton4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 667, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addGap(18, 18, 18)
                .addComponent(jButton2)
                .addGap(18, 18, 18)
                .addComponent(jButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 371, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3)
                    .addComponent(jButton4))
                .addGap(0, 16, Short.MAX_VALUE))
        );
 
        bindingGroup.bind();
 
        setSize(new java.awt.Dimension(683, 471));
        setLocationRelativeTo(null);
    }// </editor-fold>                        
 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        EditingEmployeesData eed = new EditingEmployeesData();
        eed.setVisible(true);
        this.setEnabled(true);
    }                                        
 
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        EditingEmployeesData eed = new EditingEmployeesData();
        eed.setVisible(true);
        this.setEnabled(true);
    }                                        
 
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new EmployeesFrame().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private java.util.List<model.Employee> list1;
    private javax.persistence.Query query1;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration                   
    EntityManager em = DBManager.em;;
}
 
Και εχω δημιουργησει και ακομα μια κλαση για τον EntityManager οπου ο κωδικας ειναι ο παρακατω:
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
 
public class DBManager {
    
    public static EntityManager em;
    
    public static void connect() {
        
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("PLH24_2016_3ERG_WorkPermitHandler_DraftPU");
        em = emf.createEntityManager();
    }
    
}
 
 
 

 

Αυτος ο κωδικας που αναφερεις ειναι generated απο το netbeans δεν καθομαι να τον γραψω ολο αυτο εγω :P

Ο κωδικας της κλασης ειναι ο παρακατω:

import javax.persistence.EntityManager;
import mainPackage.DBManager;
import model.Employee;
 
/**
 *
 * @author George
 */
public class EmployeesFrame extends javax.swing.JFrame {
 
    /**
     * Creates new form EmployeesFrame
     */
    public EmployeesFrame() {
        
        initComponents();
    }
 
    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
 
        query1 = java.beans.Beans.isDesignTime() ? null : em.createQuery("select e from Employee e");
        list1 = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(query1.getResultList());
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ΔΙΑΧΕΙΡΗΣΗ ΕΡΓΑΖΟΜΕΝΩΝ");
        setBackground(new java.awt.Color(255, 255, 255));
        setBounds(new java.awt.Rectangle(200, 200, 640, 480));
        setMinimumSize(new java.awt.Dimension(640, 480));
 
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, list1, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${lname}"));
        columnBinding.setColumnName("ΕΠΩΝΥΜΟ");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${fname}"));
        columnBinding.setColumnName("ΟΝΟΜΑ");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${email}"));
        columnBinding.setColumnName("E-mail");
        columnBinding.setColumnClass(String.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        jScrollPane1.setViewportView(jTable1);
 
        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/add16.png"))); // NOI18N
        jButton1.setText("Εισαγωγή");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
 
        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/edit16.png"))); // NOI18N
        jButton2.setText("Επεξεργασία");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
 
        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/delete16.png"))); // NOI18N
        jButton3.setText("Διαγραφή");
 
        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/handlersource/images/home22.png"))); // NOI18N
        jButton4.setText("Αρχική");
        jButton4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 667, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addGap(18, 18, 18)
                .addComponent(jButton2)
                .addGap(18, 18, 18)
                .addComponent(jButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 371, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3)
                    .addComponent(jButton4))
                .addGap(0, 16, Short.MAX_VALUE))
        );
 
        bindingGroup.bind();
 
        setSize(new java.awt.Dimension(683, 471));
        setLocationRelativeTo(null);
    }// </editor-fold>                        
 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        EditingEmployeesData eed = new EditingEmployeesData();
        eed.setVisible(true);
        this.setEnabled(true);
    }                                        
 
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        EditingEmployeesData eed = new EditingEmployeesData();
        eed.setVisible(true);
        this.setEnabled(true);
    }                                        
 
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(EmployeesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new EmployeesFrame().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private java.util.List<model.Employee> list1;
    private javax.persistence.Query query1;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration                   
    EntityManager em = DBManager.em;;
}
 
Και εχω δημιουργησει και ακομα μια κλαση για τον EntityManager οπου ο κωδικας ειναι ο παρακατω:
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
 
public class DBManager {
    
    public static EntityManager em;
    
    public static void connect() {
        
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("PLH24_2016_3ERG_WorkPermitHandler_DraftPU");
        em = emf.createEntityManager();
    }
    
}
 
 
 

 

 

Τελικα το βρηκα το λαθος Απλα δεν καλουσα τη μεθοδο connect της DBManager για να δημιουργηθει ο EntityManager 

Ευχαριστω για την ανταποκριση

Δημοσ.
Αυτος ο κωδικας που αναφερεις ειναι generated απο το netbeans δεν καθομαι να τον γραψω ολο αυτο εγω  :P 

 

Γνωρίζεις τι κάνει αυτός ο κώδικας ; αν δεν γνωρίζεις κακώς χρησιμοποιείς το εργαλείο του Netbeans αν και μεταξύ μας γενικότερα κακώς το χρησιμοποιείς ανεξαρτήτου περίπτωσης γιατί είναι απλά ότι χειρότερο υπάρχει και ο κώδικας που βγάζει είναι δυσανάγνωστος και πολύ δύσκολος να υποστηριχθεί - συντηρηθεί .

Αν ασχοληθείς πάντως με UI κοίταξε την JAVAFX μιας και η SWING έχει παραδώσει πνεύμα .

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...