ΑΛΛΗΛΕΠΙ ΡΑΣΗ ΑΝΘΡΩΠΟΥ ΜΗΧΑΝΗΣ 4 o ΕΡΓΑΣΤΗΡΙO Audio Player 1-3. Πάνω σε ένα jframe με διάταξη Grid Bag Layout και τίτλο «AudioPlayer» τοποθετήστε 5 ετικέτες 5 slider 3 radio button 1 button 1 ετικέτα (ακόµη) Στο Grid Bag Layout /Customize Layout βάλτε το SizeinGrid ->(+) και Fill <-> για τα jslider (2 κελιά) Eνα jslider συστατικό επιτρέπει σε ένα χρήστη να εισάγει εύκολα µια αριθµητική τιµή που οριοθετείται από µια ελάχιστη και µέγιστη τιµή. Αν ο χώρος είναι περιορισµένος, ένα jspinner είναι µια πιθανή εναλλακτική λύση αντί ένα jslider. Ετσι πχ. στην διπλανή εικόνα το jslider ρυθµιστικό χρησιµοποιείται για να ελέγξει την ταχύτητα κινούµενου σχεδίου. https://docs.oracle.com/javase/tutorial/uiswing/components/slider.html VK - 04/11/2016- [1]
4. Αν θέλετε, δώστε στα συστατικά κατάλληλα ονόµατα (variable name) π.χ. στο jlabel1 δώστε «LBass» Bάλτε στα labels και στα κουµπιά τα κατάλληλα κείµενα. Στο jlabel6, για να αλλάζουµε γραµµές, γράψτε στο text <html> (πατώντας ) <html>bass: <br/> Midrange: <br/>..</html> 5-7. Στα jslider αλλάξτε τις ιδιότητες ως εξής (σε ΟΛΑ και µετά αλλάξτε το 4 ο και 5 ο ): SlBass.setMajorTickSpacing(2); SlBass.setMaximum(10); SlBass.setMinimum(-10); SlBass.setMinorTickSpacing(1); SlBass.setPaintLabels(true); SlBass.setPaintTicks(true); SlBass.setValue(0); value:είναι η τρέχουσα τιµή του jslider 8. Αλλάξτε το 4 ο slider (Balance) ώστε να έχει minimum τo -5 και maximum σε +5 Και µε δεξί κλικ επιλέγεται Customize Code, για να αλλαχθούν τα label, γράφοντας table.put και setlabeltable Για να γράψετε τον κώδικα κατεβείτε μια γραμμή μετά την δήλωση του jslider4, και αρχίστε να γράφετε table.. table.put(new Integer(0),new JLabel("Center")); table.put(new Integer(-5),new JLabel("L")); table.put(new Integer(5),new JLabel("R")); VK - 04/11/2016- jslider4.setlabeltable(table); [2]
Τον (pre-init) κώδικα θα τον δείτε και στις ιδιότητες Και στο tab code του 4 ου slider (πατώντας ) Στην κλάση Αudio Player δηλώστε το table στις µεταβλητές: private Hashtable table = new Hashtable(); και εισάγετε τις βιβλιοθήκες import java.util.hashtable; import javax.swing.jlabel; 9. Σε όλα τα jslider βάλτε border EmptyBorder ( ή κάποιο άλλο) 10. Φτιάξτε µια Νέα Java κλάση µε όνοµα Presets ως εξής: public class Presets { private int bass; private int midrange; private int tremble; private int balance; private int volume; //Δομητής με δεξί κλικ ΙΝSERT CODE/Constructor public Presets(int bass, int midrange, int tremble, int balance, int volume) { this.bass = bass; this.midrange = midrange; this.tremble = tremble; this.balance = balance; this.volume = volume; //Getter/Setter //Με δεξί κλικ ΙΝSERT CODE/Getter and Setter/(Επιλογή όλων) //και Generate Εχοντας αυτή την κλάση, δημιουργούμε νέα αντικείμενα π.χ. ως εξής: Preset o1= new Presets(1,-1,9,0,4); (Θα κάνουμε 3 νέα αντικείμενα P[0] για τις Defaults τιμές P[1] για τις Preset1 τιμές P[2] για τις Preset2 τιμές με πίνακα public Presets[] P=new Presets[3]; ) 11. Μέσα στην κλάση Αudio Player, θα γραφτούν επι πλέον 4 μέθοδοι: 1 η setuppresets: Δίνει αρχικές τιμές στον πίνακα των Presets, P (αρχικά μπήκαν κάποιες τυχαίες τιμές). 2 η showpresets: Εμφανίζει στην ετικέτα τις τρέχουσες τιμές των πέντε jslider. Η 3 η μέθοδος βάζει τιμές στα 5 sliders από ένα αντικείμενο preset p, ενώ η 4 η μέθοδος αποθηκεύει σε ένα αντικείμενο preset p, τις τιμές των 5 sliders, έτσι Με το πάτημα του radiobuttondefaults τα πέντε jslider παίρνουν τις τιμές του P[0] 3 η loadpresets : Με το πάτημα του radiobuttonpreset1 τα πέντε jslider παίρνουν τις τιμές του P[1] Με το πάτημα του radiobuttonpreset2 τα πέντε jslider παίρνουν τις τιμές του P[2] VK - 04/11/2016- [3]
4 η storepresets(p): Με το πάτημα του κουμπιού< Store Settings > αποθηκεύονται οι τιμές των πέντε jslider ή στο P [0] (αν έχω επιλεγμένο radiobuttondefaults) ή στο P [1] (αν έχω επιλεγμένο radiobuttonpreset1) ή στο P[2] (αν έχω επιλεγμένο radiobuttonpreset2) 11-12-13.Στην ΑudioPlayer φόρμα προσθέστε (στις μεταβλητές) ένα Presets πίνακα P τριών θέσεων: public Presets[] P=new Presets[3]; //Πίνακας καθώς και τις μεθόδους: - setuppresets: θα δίνει αρχικές τιµές στον Πίνακα /3 θέσεων των Presets (θα φορτωθούν µετά στα slider με την loadpresets) - showpresets: θα εμφανίζονται οι τιμές των πέντε slider στην ετικέτα jlabel5 (προτείνετε χρήση της ΗΤΜL) public void setuppresets() { P[0] = new Presets(0,0,0,0,0); P[1] = new Presets(1,-1,9,0,4); P[2] = new Presets(2,4,-2,4,2); //-Τα defaults // Tα presets1 // Tα presets2 Mε την getvalue θα πάρουμε την τιμή από τα jslider1 jslider5 και θα την δείξουμε στην ετικέτα jlabel6 public void showpresets() { String balance; //Ειδικά για το jslider4 value: Left, Center, Right int timi= jslider4.getvalue(); if (timi > 0) balance = "Right " + String.valueOf(timi); else if (timi==0) balance = "Center"; else balance = "Left " + String.valueOf(-timi); jlabel6.settext("<html> Bass: " + jslider1.getvalue()+ "<br/> Midrange: " + jslider2.getvalue() + "<br/> Treble: " + jslider3.getvalue() + "<br/> Balance: " + balance + "<br/> Volume: " + jslider5.getvalue()+ "</html>"); jlabel6 Την μεθόδο setup θα την καλέστε στο δομητή της κλάσης : public AudioPlayer() { initcomponents(); setuppresets(); //αρχικές τιμές στον Πίνακα, χωρίς να φορτώνονται στα slider VK - 04/11/2016- [4]
14-15. Δημιουργήστε και τις μεθόδους: - loadpresets(presets p) : βάζει τιμές (setvalue) στα πέντε slider ανάλογα με το όρισμα (Preset στοιχείο του πίνακα) και τα εμφανίζει και στην ετικέτα jlabel6 (καλώντας την showpresets). - storepresets(presets p) : βάζει στη μεταβλητή/όρισμα data (Preset στοιχείο) τις τιμές που έχουν τα 5 sliders (getvalue). void loadpresets(presets p) { jslider1.setvalue(p.getbass()); jslider2.setvalue(p.getmidrange()); jslider3.setvalue(p.gettremble()); jslider4.setvalue(p.getbalance()); jslider5.setvalue(p.getvolume()); showpresets(); Αυτή καλείται με όταν πατιώνται τα κουμπιά Defaults, Presets1, Presets2 ως loadpresets(p[0]) ή loadpresets(p[1]) ή loadpresets(p[2]) αντίστοιχα void storepresets(presets p) { p.setbass(jslider1.getvalue()); p.setmidrange (jslider2.getvalue()); p.settremble(jslider3.getvalue()); p.setbalance (jslider4.getvalue()); p.setvolume (jslider5.getvalue()); Αυτή καλείται με όταν πατιέται το κουμπί STORE με πχ. storepresets(p[0]) αν είναι επιλεγμένο το κουμπί Defaults Βάλτε τα 3 radiobuttons (Defaults,Preset1,Preset2) στο ίδιο Group και επιλέξτε το (με την ιδιότητα buttongroup) και στα 3 radio: (Όταν σύρετε ένα Button group μέσα στην φόρμα θα εμφανιστεί στα Οther Components, όπου αν θέλετε αλλάζετε και το όνομά του. ) ). Προγραμματίστε το κουμπί <Store Settings> ώστε ανάλογα το radiobutton που είναι επιλεγμένο να αποθηκεύει τα δυο presets π.χ. if (jradiobuttonpreset1.isselected()) storepresets(p[1]); // 16. Κάθε φορά που αλλάζει τιμή ένα slider (change/ statechanged), εμφανίστε την αλλαγή στην ετικέτα jlabel6 - call showpresets ( και κάθε φορά που επιλέγεται ένα radio button καλείται η loadpresets ) VK - 04/11/2016- [5]