Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    dvx80
    Guest

    problema con la grafica JFrame.

    Premetto che ci capisco pochissimo di awt e swing xciò non bestemiatemi dietro ok ??Cerscherò dei essere brevo e coinciso.

    Ho fatto il mio bel JFrame e gli ho aggiunto un bellissimo menu a tendina.
    Nella restante parte dello schermo vado, a seconda di cosa mi sceglie nel menu vado a creare una schermata formata da dei button, textfiel e label e li aggiungo direttamente al frame principale con un GridBagLayout.

    Bene, la prima volta che vado ad aggiungerli tutto ok, ma se devo toglierli x anggiungerne altri non ci riesco.

    Come devo fare? Con che criterio è meglio gestire la grafica di questo tipo?

  2. #2
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,492
    Non capisco bene la domanda......
    Mi vengono in mente due modi:
    1) Inserire un bottone ( o un aopsione del menu a tendina) permanente che "pulisce" il pannello del JFrame andando a eliminare i componenti presenti su di esso.

    2)Gestire l'azione dal 'menu a tendina', ovvero se non ci sono componenti aggiunti ne aggiunge di nuovi, se invece sono già presenti componenti elimina i vecchi e inserisce i nuovi.

    Spero di essere stato d'aiuto!
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  3. #3
    Io mi preparei diversi JPanel per quante sono le diverse "schermate" da presentare nella finestra.

    Poi ogni volta che l'utente sceglie una voce dal menu a tendina, tramite un ActionListener, sostituisci il contentPane della JFrame con quello che ti serve :

    codice:
    // supponiamo di sapere che devo mettere
    // nella finestra il JPanel pannello2
    // perche' l'utente mi ha scelto la
    // seconda voce del menu. Sia frame la 
    // variabile che contiene il JFrame.
    
    frame.setContentPane(pannello2);
    frame.invalidate();
    frame.validate();
    le ultime 2 istruzioni sono per far fare al frame il refresh della grafica.
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  4. #4
    dvx80
    Guest
    il problema non è come fare a mettere i componenti a seconda di cosa scelga l'utente, il problema è come cancellarli.

    Ok usare un JPanel per metterci i vari elementi ma poi è sufficiente fare un remove() per eliminarlo o bisogna fare qualcosa d'altro?

  5. #5
    Se tu usi tanto JPanel quante sono le schermate di cui necessiti, ad ogni chiamata a setContentPane() imposti il JPanel che ti serve e il precedente viene eliminato.

    Non hai bisogno di chiamate a remove()
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  6. #6
    dvx80
    Guest
    codice:
    	private void priorità() throws SQLException{
    
    		controllo="priorità";
    		// Caricamento dei dati della tabella Doc_di_Prodotto
    		l=s.selectFromGrafica("priorità");
    		l.inizio();
    		
    		Container contentPane=getContentPane();
    		GridBagLayout gbl=new GridBagLayout();
    		JPanel jp3=new JPanel();
    		jp3.setLayout(gbl);
    		
    		
    		JLabel lcodcf=new JLabel("Codice Cliente: ");
    		fcodcf=new JTextField(l.restituisciCodCf(),10);
    		JLabel lnomtab=new JLabel("Nome Tabella: ");
    		fnomtab=new JTextField(l.restituisciNomArt(),15);
    		JLabel lpriorità=new JLabel("Priorità: ");
    		fpriorità=new JTextField(""+l.restituisciNumSta()+"",10);
    		
    		
    		JButton bfirst=new JButton("First Record");
    		JButton bnext=new JButton("Next Record");
    		JButton bprev=new JButton("Prev Record");
    		JButton blast=new JButton("Last Record");
    		JButton banew=new JButton("New Record");
    		JButton badel=new JButton("Delete Record");
    		JButton basave=new JButton("Save Record");
    		
    		GridBagConstraints gbc=new GridBagConstraints();
    		
    		gbc.fill=GridBagConstraints.NONE;
    		gbc.anchor=GridBagConstraints.CENTER;
    		gbc.weightx=200;
    		gbc.weighty=50;
    		jp3.add(bfirst,gbc,0,0,1,1);
    		jp3.add(bprev,gbc,1,0,1,1);
    		jp3.add(bnext,gbc,2,0,1,1);
    		jp3.add(blast,gbc,3,0,1,1);
    		jp3.add(banew,gbc,1,3,1,1);
    		jp3.add(badel,gbc,2,3,1,1);
    		jp3.add(basave,gbc,1,4,2,1);
    		
    		gbc.fill=GridBagConstraints.NONE;
    		gbc.anchor=GridBagConstraints.CENTER;
    		gbc.weightx=200;
    		gbc.weighty=50;
    		jp3.add(lcodcf,gbc,0,1,1,1);
    		jp3.add(lnomtab,gbc,1,2,1,1);
    		jp3.add(lpriorità,gbc,2,1,1,1);
    		
    		gbc.fill=GridBagConstraints.NONE;
    		gbc.anchor=GridBagConstraints.CENTER;
    		gbc.weightx=200;
    		gbc.weighty=50;
    		jp3.add(fcodcf,gbc,1,1,1,1);
    		jp3.add(fnomtab,gbc,2,2,1,1);
    		jp3.add(fpriorità,gbc,3,1,1,1);
    		
    		bfirst.addActionListener(this);
    		bprev.addActionListener(this);
    		bnext.addActionListener(this);
    		blast.addActionListener(this);
    		banew.addActionListener(this);
    		basave.addActionListener(this);
    		badel.addActionListener(this);
    		setContentPane(jp3);
    		validate();
    	}//[M] priorità
    Ho provato ad agguingere i componenti sia in un JPanel che in un JFrame e poi aggiungere questo al setContentPane ma mi da errore ma non capisco il xchè .
    A che mi dice come farlo funzionare mando un assegno da 1000 mila € giuro giuro .

  7. #7
    dvx80
    Guest
    Originariamente inviato da battlehorse
    Se tu usi tanto JPanel quante sono le schermate di cui necessiti, ad ogni chiamata a setContentPane() imposti il JPanel che ti serve e il precedente viene eliminato.

    Non hai bisogno di chiamate a remove()
    Ottimo questo andrebbe proprio bene. Adesso resta solo il problema di farlo funzionare !!!

  8. #8
    Prova a mettere un invalidate() prima del validate() perche' se ricordo bene validate() fa il refresh solo se al JFrame e' stato notificato un cambiamento (ad es. con invalidate()).

    Comunque io usavo questo codice e andava :

    codice:
    protected void swapContainer(Container c) {
    		setVisible(false);
    		setContentPane(c);
    		invalidate();
    		validate();
    		setSize(400,300);
    		setVisible(true);
    	}
    dove come variabile c passavo un JPanel.

    Comunque che errore ti da?
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  9. #9
    dvx80
    Guest
    Mi da quest'errore:

    Grafica.java:373: cannot resolve symbol
    symbol : method add (javax.swing.JTextField,java.awt.GridBagConstraint s,int,int,int,int)
    location: class javax.swing.JPanel jp3.add(fpriorità,gbc,3,1,1,1);

    e non capisco il xchè. Non è possibile che non esista il metodo add nel panel.
    Xò il procedimento x disegnare stè cose l'ho copiato spudoratamente xchè come dicevo prima non ci capisco un cavolo. Tra panel, frame e contentPane faccio una confusione mostruosan !!!

  10. #10
    Ok, tutto chiaro.

    Il JPanel dispone del metodo add, ma non nella forma in cui tu lo usi.

    Utilizzare il gridbaglayout e' un po' incasinato e quello e' un wrapper per specificare in una unica chiamata tutte le proprietà del gridbaglayout relative al componente che vuoi aggiungere.

    Da dove hai copiato sta roba vedrai che troverai anche la definizione di questo metodo add rivisitato.

    Su quello che sarebbe l'utilizzo standard dei gridbaglayout guarda :

    http://java.sun.com/docs/books/tutor...t/gridbag.html
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

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 © 2020 vBulletin Solutions, Inc. All rights reserved.