Wise_One Δημοσ. 9 Νοεμβρίου 2008 Δημοσ. 9 Νοεμβρίου 2008 Έρχομαι με μια απορία που έχει αρκετό κώδικα αν θελήσετε να τρέξετε, αλλά ενδεχομένως απλή αν η απάντηση είναι μια-δυο γραμμές. Ακολούθησα το Tutorial της Sun για δημιουργία GUI με το NetBeans. Eίπα μετά να κάνω και το δικό μου προγραμματάκι. Ο κώδικας αυτός: > /* * SimpleCalculatorGUI.java * * Created on 9 Νοέμβριος 2008, 7:31 μμ */ package learn; /** * * @author Βασίλειος */ public class AgePresentationGUI extends javax.swing.JPanel { /** Creates new form SimpleCalculatorGUI */ public AgePresentationGUI() { 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() { ageLabel = new javax.swing.JLabel(); ageText = new javax.swing.JTextField(); sayComment = new javax.swing.JButton(); comment = new javax.swing.JTextField(); ageLabel.setText("How old are you?"); sayComment.setText("Say"); sayComment.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sayCommentActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(143, 143, 143) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(sayComment, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(ageText) .addComponent(ageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(comment)) .addContainerGap(174, Short.MAX_VALUE)) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {ageLabel, ageText, sayComment}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(ageLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(ageText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(sayComment) .addGap(18, 18, 18) .addComponent(comment, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(165, Short.MAX_VALUE)) ); }// </editor-fold> private void sayCommentActionPerformed(java.awt.event.ActionEvent evt) { String finalComment = ""; if(Double.parseDouble(ageText.getText()) < 0){ finalComment = "Wrong age!"; } else if(Double.parseDouble(ageText.getText()) < 12){ finalComment = "Child"; } else if(Double.parseDouble(ageText.getText()) <= 18){ finalComment = "Teenager"; } else{ finalComment = "Adult"; } comment.setText(finalComment); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new AgePresentationGUI().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JLabel ageLabel; private javax.swing.JTextField ageText; private javax.swing.JTextField comment; private javax.swing.JButton sayComment; // End of variables declaration } Κάνει compile & run χωρίς πρόβλημα, μόνο που δε "σηκώνει" το GUI που έφτιαξα. Μήπως φταίει τ' ότι αντέγραψα τον κώδικα της main() απ' το demo της Sun;
Wise_One Δημοσ. 10 Νοεμβρίου 2008 Μέλος Δημοσ. 10 Νοεμβρίου 2008 Όχι. Δεν πετάει τίποτα. Το output στο Netbeans είναι: > init: deps-jar: compile: run: BUILD SUCCESSFUL (total time: 2 seconds)
alex2005 Δημοσ. 11 Νοεμβρίου 2008 Δημοσ. 11 Νοεμβρίου 2008 Α τώρα το παρατήρησα. Γιατί η τάξη σου κάνει extend JPanel? Κανονικά θα έπρεπε να κάνει extend JFrame ή αλλιώς να βάλεις το JPanel μέσα σε ένα JFrame. Δηλαδή στην main θα μπορούσες να κάνεις: >JFrame fr = new JFrame(); fr.setSize(.....); ....... και ότι αρχικοποίηση θέλεις. fr.setContentPane(new AgePresentationGUI()); fr.setVisible(true);
Wise_One Δημοσ. 11 Νοεμβρίου 2008 Μέλος Δημοσ. 11 Νοεμβρίου 2008 Συγχώρησε με φίλε μου αλλά δυστυχώς δε μπορώ να σου απαντήσω. Ήταν η πρώτη προσπάθεια να κάνω GUI πρόγραμμα με NetBeans και τον κώδικα τον έφτιαξε αυτόματα. Η αλήθεια είναι ότι έκατσα να κάνω GUI χωρίς να έχω μελετήσει το θεωρητικό μέρος, οπότε μάλλον φταίει η απειρία μου. Anyway σ' ευχαριστώ για την απάντηση, δε μπορώ να κάνω αλλαγές στο πρόγραμμα (προς το παρόν), θα πιαστώ αρχικά με αυτό το θέμα στο Thinking In Java κι όταν αποκτήσω εμπειρία εκτός GUI Builder, τότε θα πάω στο GUI Builder
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.