|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
[Java] Problemi con la gui (pulsanti ecc) help
Salve ragazzi mi sono da qualche giorno cimentato in java! Sono alle prime armi con la programmazione ad oggetti. Sempre sentita dire ma mai usata!
Già c'è il fatto che ancora non ci sono proprio entrato poi certi comandi non riesco ad implementarli per bene...è un mix che mi ha fatto fondere! Avevo visto un esempio di polimorfismo di un esempio abbastanza classico: quello della classe animale e poi i vari oggetti-> cane, gatto ecc che tramite il metodo getverso() dovrebbero fare il verso a seconda dell'animale selezionato! L'intezione mia era quella di fare una finestra con vari bottoni uno per ogni animale poi associare ad ognuno una figura e un suono! Chiaramente prima di scrivere ho cercato ma non sono riuscito a venirne fuori! In primis ho visto che ci sono due approcci awt e swing e da quello che ho capito il secondo è quello più gradito implementato dalla seconda versione tanto che ci sono alcuni metodi "deprecati" quali show(). Ora vi metto il macello di codice che ho scritto Codice:
java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
public class Fattoria extends Frame {
private JFrame frame;
private JButton button1;
private JButton button2;
private JButton button3;
private JButton button4;
private JButton button5;
private JButton button6;
private JButton button7;
private JButton button8;
private JButton button9;
public Fattoria() {
super();
frame = new JFrame("Fattoria");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(null);
frame.setSize(new Dimension(1000, 1000));
frame.getContentPane().setLayout(new FlowLayout());
frame.ImageIcon icon = new ImageIcon("cane.gif");
button1 = new JButton("Cane", icon);
button1.setIcon(icon);
button1.setDisabledIcon(icon);
button1.setEnabled(false);
button2 = new JButton("Gatto");
button3 = new JButton("Cavallo");
button4 = new JButton("Elefante");
button5 = new JButton("Tigre");
button6 = new JButton("Lupo");
button7 = new JButton("Rana");
button8 = new JButton("Maiale");
button9 = new JButton("Mucca");
button1.setBackground(Color.red);
button2.setBackground(Color.green);
button3.setBackground(Color.white);
button4.setBackground(Color.red);
button5.setBackground(Color.green);
button6.setBackground(Color.white);
button7.setBackground(Color.red);
button8.setBackground(Color.green);
button9.setBackground(Color.cyan); //buttonStop.setLayout(new borderLayout());
//button1.setBounds(5,5,5,5);
JPanel pannello = new JPanel(new GridLayout(3,3)); // crea un pannello!
pannello.add(button1); // aggiunge al pannello i bottoni!
pannello.add(button2);
pannello.add(button3);
pannello.add(button4);
pannello.add(button5);
pannello.add(button6);
pannello.add(button7);
pannello.add(button8);
pannello.add(button9);
frame.add(pannello);
frame.pack();
frame.setVisible(true);
}
}
di librerie ne ho importate varie perchè ero nel dubbio! Se provate l'output a me viene una tab 3x3 con i vari bottoni colorati però non riesco ad andare oltre! L'audio che per adesso non mi interessa... non riesco però ad applicare l'immagine ad un tasto!Come si fa? ci sono formati predefiniti? va bene se metto le icone nel workspace? Poi non riesco a dimensionare i vari componenti, cioè: mi da una dimensione di default per la finestra dell'output che posso resizare ma non riesco ad impostarne una dim a mia volontà( lo stesso vale per i bottoni) e poi non riesco ad associare l'immagine che voglio al bottone! Grazie mille!
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao Solido, quanto entusiasmo!
Frena un attimo, se per te è tutto nuovo; stai cercando di assorbire molti concetti tutti insieme. Forse non è la risposta che ti aspettavi, però quando uno si cimenta per la prima volta con AWT/Swing è meglio se lo fa dopo essersi letto qualcosa circa gli aspetti basilari della sua architettura. Fortunatamente c'è un ottimo tutorial qui sul forum al riguardo, ti consiglio di cominciare con questo: Swing Espresso
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Quote:
Bella lunghetta hehe... piano piano me la leggerò tutta..anzi no ci devo mettere il giusto. Sono andato però alla ricerca di un concetto e in questa guida non mi chiarisce un concetto! Il mio scopo è quello di assegnare uno sfondo ad ogni bottone e per fare questo, come indica anche la guida, ho usato ImageIcon. ImageIcon = new ImageIcon( path) solo che per me il problema è proprio la directory... io le immagine pernsavo di salvarle nel workspace...è una scelta saggia? nel caso lo sia io come piffero devo settare il mio path? Io avevo messo così: "C:://Users/Andrea/workspace/Pannello/Pannello_bin/bin/cane.jpeg ma probabilmente sbaglio! Tra l'altro non capisco come mai non mi prende il \ che sono le barre che ci sono anche in dos... boh!!! Qualche consiglio? grazie mille ps: il formato jpeg va bene?
__________________
Ho concluso felicemente molte trattative su questo forum! Ultima modifica di Solido : 12-10-2011 alle 23:17. |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() Considera che il testo di riferimento "Java Swing" conta più di 1000 pagine, e tratta solo le basi. Se veramente vuoi programmare c'è da studiare Quel tutorial è la migliore introduzione che io abbia mai letto su Swing, per sintesi, chiarezza di esposizione, e ordine di trattazione degli argomenti. E tra l'altro è in italiano, più di così... Comunque l'idea di leggerlo tutto non è sbagliata, anzi. Se ti prendi 3 orette libere lo fai agevolmente. Comunque anche qui trovi dei riferimenti molto utili: http://download.oracle.com/javase/tu...ing/index.html In particolare consulta "Lesson: Using Swing Components", trovi degli howTo molto comodi. Quote:
Codice:
MiaApplicazione
|- build
|- dist
|- src
|- mioPackageRadice
|- images
Se crei una cartella, diciamo "images", in cui infilare dentro le immagini da caricare come icone per i pulsanti nell'interfaccia grafica, quando verrà eseguita la build del progetto e verrà generato il .jar da distribuire, esso conterrà le immagini. Potrai fare riferimento a quelle immagini e caricarle a runtime tramite il metodo getResource a cui puoi accedere tramite una qualsiasi classe caricata raggiungibile a partire da mioPackageRadice, in questo modo: Codice:
// supponiamo di essere in Fattoria.java
// e che Fattoria.java stia nella cartella mioPackageRadice
// di conseguenza la class Fattoria deve stare nel package mioPackageRadice
package mioPackageRadice;
import javax.swing.ImageIcon;
...
public class Fattoria {
...
// da qualche parte, in Fattoria
ImageIcon loadIcon(String name) {
URL url= Fattoria.class.getResource("/images/" + name);
if (url == null) {
// non ho trovato l'immagine
return null;
} else {
return new ImageIcon(url);
}
}
// da qualche altra parte...
// istanzio un bottone con icona:
Icon icon = loadIcon("smile_icon.png");
JButton button = (icon != null) ?
new JButton("Smile!", icon) : new JButton("Smile!");
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 13-10-2011 alle 11:12. |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Potrei risponderti ma non sarebbe giusto. per vari motivi che ora ti elenco:
1) la pappa pronta fà male nel nostro campo 2) quella guida scende come l'acqua 3) preparati a leggere milioni di pagine (ovviamente in inglese), e fidati che sarà un bene. non finirai mai di imparare. consiglio spassionato...iniziati a leggere anche la guida sul gridbaglayout....ti faranno impazzire i layout in java, ma se usi bene quello, hai salva la vita!!!
__________________
My gaming placement |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
raga ho letto le parti che mi interessavano della guida e qualcosa ho capito...solo che adesso voelvo riscriverla in un formato un pochino migliore facendo quindi uso di array e di for... fin qui tutto bene solo che mi trovo un errore che non riesco a correggere :
Codice:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Graphics;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
public class Fattoria extends JPanel {
JButton[] b= new JButton[9];
private static final long serialVersionUID = 1L;
public Fattoria() {
//super();
Component frame = new JFrame("Fattoria");
((JFrame) frame).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(null);
frame.setPreferredSize(new Dimension(1000, 800));
// Praticamente qui vorrei creare i bottoni e assegnar loro l'img tutta nel solito ciclo
for (int j=1; j<10; j++){
b[j]= new JButton("button"+j);
getContentPane().add(b[j]);
final Image immagine = new ImageIcon("src/immagine"+j+".jpg").getImage();
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(immagine, 0, 0,getWidth(),getHeight(), null);
}
};
solo che mi da errore nell'istruzione : public void paintComponent(Graphics g){ dicendomi che void non è un tipo valido di ritorno poi mi dice che ci sono multiple markers at this line indicandomi le parentesi tonde... boh io ho visto in varie guide e ho visto che è una sintassi standard e non capisco dove sbaglio... da qualche parte si menzionano dei metodi ma nn ci ho capito nulla... qualcuno mi sa aiutare? grazie mille
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
![]() chiedo anche se qualcuno mi consiglia un libro buono per il java possibilmente in italiano. Ci sto mettendo impegno ma non riesco cmq a entrare a pieno in questo tipo di programmazione
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
|
Stai definendo una funzione dentro un ciclo e dentro un altra funzione(il costruttore)!!!!!!!
Miglior libro per principianti di Java: Savitch - Absolute Java. Leggilo con calma e attenzione, ne hai bisogno.
__________________
AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
ok grazie...
ma per quanto riguarda il mio programma come dovrei fare? io correi solo assegnare tramite il for l'immagini a tutti i miei bottoni! Dove sbaglio? prima avevo creato un bottone alla volta e le immagini tornavano anche se i suoni associati ai bottoni facevano i capricci...solo che non si poteva vedere quindi avevo deciso di riscriverlo tramite array e ciclo for
__________________
Ho concluso felicemente molte trattative su questo forum! Ultima modifica di Solido : 13-11-2011 alle 16:34. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
ho risolto così:
Codice:
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
public class Fattoria {
private JFrame frame;
private JPanel pannello;
JButton[] b = new JButton[10];
public Fattoria() {
frame = new JFrame("Fattoria");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(null);
frame.setPreferredSize(new Dimension(1000, 800));
pannello = new JPanel(new GridLayout(3,3)); // crea un pannello!
for (int j = 1; j < 10; j++){
//Toolkit tk= Toolkit.getDefaultToolkit();
final Image immagine = new ImageIcon("src/immagine/" + j +".jpg").getImage();
b[j]= new JButton(){
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(immagine, 0, 0,getWidth(),getHeight(), null);
}
};
pannello.add(b[j]);// vengono aggiunti i bottoni al pannello dentro il jframe
}
frame.add(pannello);
frame.pack();
frame.setVisible(true);
}
}
ora mi manca di associarci i suoni... ma nn riesco a trovare nulla a riguardo di esauriente... avete qualche consiglio? ah: c'è qualche altro metodo per prendere il pat di un'immagine o di un suono? grazie mille!!!
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:32.






















