Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39

    [JAVA]Aiuto Swing

    ciao a tutti ragazzi. ho letto un po la documentazione ufficiale ,come sempre consigliato, e spulciato un po i vari thread che contenevano swing come parola chiave ma il mio dubbio non si e' risolto. Finora ho sempre creato tramite il design di netbeans le mie jframe piene di bottoni e immagini posizionate a mio piacimento. ho deciso di evitare l'approccio design e iniziare a scrivere codice da solo e avevo come idea di creare un jframe settando il layout come gridLayout(n,m).cosi' potro decidere dove mettere (piu o meno) i miei oggetti siano essi immagini o bottoni.pero' mi sembra assurdo, ovvero non potendo accedere ad un determinato campo dovrei prima riempire,gli spazi che voglio lasciare in bianco, di jpanel (a vuoto) fin quando non arrivo alla posizione da me scelta! avete qualche approccio piu semplice? ci sara' sicuramente perche' cosi' e' molto impegnativo calcolare per bene le cose e soprattutto per ogni spazio vuoto creare un jpanel a vuoto mi sembra assurdo. piu tardi posto un po di codice che avevo abbozzato siccome e' su un altro pc. grazie mille per l'eventuale aiuto!

    edit: bene ragazzi nella documentazione ufficiale non avevo cliccato sul layout GridBagLayout quindi provo questa soluzione!
    voi magari se avete altre idee sono sempre bene accette!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Come hai detto tu stesso, GridBagLayout ti consente di specificare le posizioni dei componenti.

    In base all'interfaccia che hai creato o che vuoi creare, il tuo approcio può essere migliore o peggiore rispetto ad un altro.
    In alternativa puoi anche posizionarli tu stesso utilizzando setBounds() e setLocation().

    PS: Mai usare un IDE per creare applicazioni grafiche se non hai già esperienza a riguardo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39
    Codice PHP:
    import javax.swing.*;

    import java.awt.*;



    public class 
    Welcome extends JFrame {

        public 
    Welcome(){
            
    JFrame finestra = new JFrame("Gestione Scommesse");
            
    GridBagLayout layout = new GridBagLayout();
            
    GridBagConstraints limiti = new GridBagConstraints();
            
    JButton bottone1 = new JButton("Click Me!");
            
    JButton bottone2 = new JButton("Touch Me!");
            
    JPanel pannello1 = new JPanel();
            
    JPanel pannello2 = new JPanel();
            
    JLabel label = new JLabel();
            
    label.setIcon(new javax.swing.ImageIcon("/home/Beppe.jpg"));
            
    finestra.getContentPane().setBackground(new Color(0,0,0));
            
    finestra.setResizable(false);
            
    finestra.setDefaultCloseOperation(EXIT_ON_CLOSE);
            
    finestra.setSize(1000,500);
            
    finestra.setLocationRelativeTo(null);
            
    bottone1.setBounds(10,10,15020);
            
    bottone2.setBounds(10,10,15020);
            
    pannello1.setLayout(layout);
            
    pannello1.setPreferredSize(new Dimension(1000,500));
            
    limiti.gridx 1;
            
    limiti.gridy 0;
            
    limiti.weightx 2;
            
    limiti.weighty 1;
            
    limiti.fill GridBagConstraints.BOTH;
            
    limiti.anchor GridBagConstraints.CENTER;
            
    layout.setConstraints(label,limiti);
            
    pannello1.add(label);
            
    limiti.gridx 1;
            
    limiti.gridy 1;
            
    limiti.weightx 1;
            
    limiti.weighty 1;
            
    limiti.fill GridBagConstraints.NONE;
            
    limiti.anchor GridBagConstraints.EAST;
            
    layout.setConstraints(bottone1,limiti);
            
    pannello1.add(bottone1);
            
    limiti.gridx 2;
            
    limiti.gridy 1;
            
    limiti.weightx 1;
            
    limiti.weighty 1;
            
    limiti.fill GridBagConstraints.NONE;
            
    limiti.anchor GridBagConstraints.CENTER;
            
    layout.setConstraints(bottone2,limiti);
            
    pannello1.add(bottone2);
            
    finestra.getContentPane().add(pannello1);
            
    finestra.pack();
            
    finestra.setVisible(true);
        }
        public static 
    void main(String[] args) {
            
    Welcome w = new Welcome();
        }
        


    ho letto un po di codice sparso in rete ma il mio problema e' principalmente uno...ovvero e' proprio una griglia immaginaria visto che non dichiaro il numero di righe e colonne! pero' arrivato ad un certo settaggio di gridx e gridy non cambia piu l'interfaccia!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prima di tutto non ha senso il JFrame che istanzi nel costruttore. Sei già all'interno di un JFrame poichè estendi JFrame! Di conseguenza i "finestra.attributo" li devi evitare; togli il finestra, e rimuovi la creazione del JFrame.

    Poi una cosa ulteriore: non devi istanziare così la classe. Un approccio che puoi utilizzare è il seguente:

    codice:
    public static void makeGUI() {
      Welcome w = new Welcome();
    }
    
    public static void main(String[] args) {
      try {
        SwingUtilities.invokeAndWait(new Runnable() {
          public void run() {
            makeGUI();
          }
        });
      } catch(Exception e) {}
    }

    Segui per bene il tutorial, credo ti aiuti
    http://download.oracle.com/javase/tu...t/gridbag.html

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39
    codice:
    import javax.swing.*;
    
    import java.awt.*;
    import static java.awt.GridBagConstraints.*;
    
    
    
    public class Welcome extends JFrame {
    
    	public Welcome(){
    		super("Gestione Scommesse");
    		GridBagLayout layout = new GridBagLayout();
    		GridBagConstraints limiti = new GridBagConstraints();
    		JButton aggiungi = new JButton("Aggiungi Scommessa");
    		JButton verifica = new JButton("Verifica Vincita");
    		JButton inserisci = new JButton("Inserisci Risultati");
    		JButton saldo = new JButton("Visualizza Saldo");
    		JButton storico = new JButton("Visualizza Storico");
    		JButton exit = new JButton("Exit");
    		JPanel pannello1 = new JPanel();
    		JLabel testoScommesse = new JLabel();
    		testoScommesse.setIcon(new javax.swing.ImageIcon("/home/rambo/Downloads/calcio.gif"));
    		this.getContentPane().setBackground(new Color(0,0,0));
    		this.setResizable(false);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setSize(1000,500);
    		this.setLocationRelativeTo(null);
    		pannello1.setLayout(layout);
    		setConstraint(limiti,1,0,0,0,2,1,BOTH,CENTER);
    		pannello1.add(testoScommesse,limiti);
    		setConstraint(limiti,1,2,1,0,1,1,BOTH,CENTER);
    		pannello1.add(aggiungi,limiti);
    		setConstraint(limiti,1,3,1,0,1,1,BOTH,CENTER);
    		pannello1.add(verifica,limiti);
    		setConstraint(limiti,1,4,1,0,1,1,BOTH,CENTER);
    		pannello1.add(saldo,limiti);
    		setConstraint(limiti,1,5,1,0,1,1,BOTH,CENTER);
    		pannello1.add(inserisci,limiti);
    		setConstraint(limiti,1,6,1,0,1,1,BOTH,CENTER);
    		pannello1.add(storico,limiti);
    		setConstraint(limiti,3,0,1,0,1,1,NONE,NORTH);
    		pannello1.add(exit,limiti);
    		this.getContentPane().add(pannello1);
    		this.pack();
    		this.setVisible(true);
    	}
    	public void setConstraint(GridBagConstraints lim,int gridx,int gridy,int weightx,int weighty,int gridwidth,int gridheight,int fill,int anchor){
    		lim.gridx = gridx;
    		lim.gridy = gridy;
    		lim.weightx = weightx;
    		lim.weighty = weighty;
    		lim.gridwidth = gridwidth;
    		lim.gridheight = gridheight;
    		lim.fill = fill;
    		lim.anchor = anchor;
    	}
    	public static void makeGUI(){
    		Welcome w = new Welcome();
    	}
    	public static void main(String[] args) {
    		try{
    			SwingUtilities.invokeAndWait(new Runnable(){
    				public void run(){
    					makeGUI();
    				}
    			});
    		}
    		catch(Exception e){}
    		/*
    		Database db = new Database("GestioneBollette","root","passwd");
    		if ( !db.connetti() ) {
    			   System.out.println("Errore durante la connessione.");
    			   System.out.println( db.getErrore() );
    			   System.exit(0);
    		}
    		*/
    	}
    	
    
    }
    sono riuscito a trovare una soluzione carina adesso iniziero un po a utilizzare delle linee divisorie e poi implemento gli action listener. che dici patrick e' accettabile a livello di codice. toglimi una curiosita! invece di istanziare un jpanel potevo utilizzare getContentPane sul mio frame e lavorare su quello che mi ritornava? se si quali erano poi le differenze? grazie e scusa sempre per le mille domande

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    che dici patrick e' accettabile a livello di codice.
    Bhe scritto in questo modo è un pò troppo disordinato secondo me. Ad esempio, ora che dovrai gestire le pressioni sui bottoni non potrai fare in questo modo, sempre se non crei una classe anonima nel costruttore.
    Esempio:

    codice:
    bottone.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        // Pressione di "bottone"
      }
    });
    Puoi scegliere se fare così, oppure implementare ActionListener, registrare gli ascoltatori su un dato bottone e successivamente implementare actionPerformed().
    Ti consiglierei inoltre di suddividere grazie ai commenti un pò il codice, o almeno dare alcuni spazi (ad esempio tra il setting di un bottone con le costanti di GridBag ed un altro).


    toglimi una curiosita! invece di istanziare un jpanel potevo utilizzare getContentPane sul mio frame e lavorare su quello che mi ritornava? se si quali erano poi le differenze?
    getContentPane() ritorna un Container, è praticamente "impensabile" lavorare su un tal oggetto. Su di esso si posa poi Panel di Awt, e si posa JComponent, su cui a sua volta si appoggia JPanel. Quindi come vedi è troppo in alto nella gerarchia.

    Qui puoi avere alcuni chiarimenti: http://download.oracle.com/javase/tu...ml#contentpane

    La prima differenza che noterai è l'assenza dei metodi di JComponent (ne dichiara molti), e di conseguenza di JPanel essendo sottoclasse di JComponent.

    grazie e scusa sempre per le mille domande
    Figurati, siamo qui per questo

    PS: La connessione utilizzando Database non la farei ove è ora (seppur commentata al momento).

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39
    vabbe' dici perche' le variabili sono dichiarate nel costruttore vero?
    ovviamente adesso aggiusto il tutto,io intendevo corretto a livello di codice per il problema che la mia classe gia' estendeva jframe e invece io ne utilizzavo un altro!
    adesso ho aggiunto altre due tre cose e sistemo al meglio il codice e poi mi dai un parere ok?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39
    vabbe' dici perche' le variabili sono dichiarate nel costruttore vero?
    ovviamente adesso aggiusto il tutto,io intendevo corretto a livello di codice per il problema che la mia classe gia' estendeva jframe e invece io ne utilizzavo un altro!
    adesso ho aggiunto altre due tre cose e sistemo al meglio il codice e poi mi dai un parere ok?

    edit: ecco ti posto il codice
    codice:
    import javax.swing.*;
    
    import java.awt.*;
    import static java.awt.GridBagConstraints.*;
    
    
    
    public class Welcome extends JFrame {
    	JButton aggiungi;
    	JButton verifica;
    	JButton inserisci;
    	JButton saldo;
    	JButton storico;
    	JButton exit;
    	Icon icon;
    	JPanel pannello1;
    	JLabel testoScommesse;
    	public Welcome(){
    		super("Gestione Scommesse");
    		this.setResizable(false);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setSize(1000,500);
    		this.setLocationRelativeTo(null);
    		GridBagLayout layout = new GridBagLayout();
    		GridBagConstraints limiti = new GridBagConstraints();
    		pannello1 = new JPanel();
    		pannello1.setLayout(layout);
    		//settaggio limiti dai bordi
    		limiti.insets.top = 5;
    		limiti.insets.bottom = 5;
    		limiti.insets.left = 5;
    		limiti.insets.right = 5;
    		//creazione e aggiunta al pannello della label con l'immagine
    		testoScommesse = new JLabel();
    		testoScommesse.setIcon(new javax.swing.ImageIcon("/home/rambo/Downloads/calcio.gif"));
    		setConstraint(limiti,1,0,0,0,2,1,BOTH,CENTER);
    		pannello1.add(testoScommesse,limiti);
    		
    		//creazione e aggiunta al pannello del bottone aggiungi
    		aggiungi = new JButton("Aggiungi Scommessa");
    		aggiungi.setPreferredSize(new Dimension(200,25));
    		setConstraint(limiti,1,3,1,0,1,1,NONE,EAST);
    		pannello1.add(aggiungi,limiti);
    		
    		//creazione e aggiunta al pannello del bottone verifica
    		verifica = new JButton("Verifica Vincita");
    		verifica.setPreferredSize(new Dimension(200,25));
    		setConstraint(limiti,1,4,1,0,1,1,NONE,EAST);
    		pannello1.add(verifica,limiti);
    		
    		//creazione e aggiunta al pannello del bottone saldo
    		saldo = new JButton("Visualizza Saldo");
    		saldo.setPreferredSize(new Dimension(200,25));
    		setConstraint(limiti,1,5,1,0,1,1,NONE,EAST);
    		pannello1.add(saldo,limiti);
    		
    		//creazione e aggiunta al pannello del bottone inserisci
    		inserisci = new JButton("Inserisci Risultati");
    		inserisci.setPreferredSize(new Dimension(200,25));
    		setConstraint(limiti,1,6,1,0,1,1,NONE,EAST);
    		pannello1.add(inserisci,limiti);
    		
    		//creazione e aggiunta al pannello del bottone storico
    		storico = new JButton("Visualizza Storico");
    		storico.setPreferredSize(new Dimension(200,25));
    		setConstraint(limiti,1,7,1,0,1,1,NONE,EAST);
    		pannello1.add(storico,limiti);
    		
    		//creazione e aggiunta al pannello del bottone exit
    		Image i=java.awt.Toolkit.getDefaultToolkit().getImage("/home/rambo/Downloads/exit.jpg");
    		i=i.getScaledInstance(50,50,Image.SCALE_DEFAULT);
    		icon = new ImageIcon(i);
    		exit = new JButton(icon);
    		exit.setPreferredSize(new Dimension(50,50));
    		setConstraint(limiti,3,0,1,0,1,1,NONE,NORTH);
    		pannello1.add(exit,limiti);
    		
    		//AGGIUNGO TUTTO AL FRAME E POI RENDO VISIBILE LA FINESTRA ADATTATA
    		this.getContentPane().add(pannello1);
    		this.pack();
    		this.setVisible(true);
    	}
    	public void setConstraint(GridBagConstraints lim,int gridx,int gridy,int weightx,int weighty,int gridwidth,int gridheight,int fill,int anchor){
    		lim.gridx = gridx;
    		lim.gridy = gridy;
    		lim.weightx = weightx;
    		lim.weighty = weighty;
    		lim.gridwidth = gridwidth;
    		lim.gridheight = gridheight;
    		lim.fill = fill;
    		lim.anchor = anchor;
    	}
    	public static void makeGUI(){
    		Welcome w = new Welcome();
    	}
    	public static void main(String[] args) {
    		try{
    			SwingUtilities.invokeAndWait(new Runnable(){
    				public void run(){
    					makeGUI();
    				}
    			});
    		}
    		catch(Exception e){}
    		/*
    		Database db = new Database("GestioneBollette","root","sizzetta");
    		if ( !db.connetti() ) {
    			   System.out.println("Errore durante la connessione.");
    			   System.out.println( db.getErrore() );
    			   System.exit(0);
    		}
    		*/
    	}
    	
    
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Le variabili di istanza di norma, se non devono essere modificate dall'esterno, vengono dichiarate private.
    Inoltre, puoi dichiarare tutti i bottoni (come tutte le altre variabili) separandoli semplicemente da una virgola. Le variabili che non utilizzerai più all'esterno del costruttore possono anche essere dichiarate al suo interno.

    Visto così, mi sembra corretto. ^^
    Che intendi fare con la classe Database che hai commentato?

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    39
    Veramente le ho fatte di classe in modo da poter fare i listener.dopo inserisco un po di codice con gli actionlistener

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.