Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313

    aiuto interfaccia grafica

    ciao,

    devo riuscire a fare un'interfaccia grafica.. chi mi da una mano?

    non é molto complicata... devo avere 1 pannello che contiene fino a 4 oggetti.

    questi oggetti interni sono dei semplici panels (bordo e nome) che contengono un textbox...

    il problema é che questi oggetti saranno aggiunti dinamicamente dal programma. quindi devo poter fare una cosa del genere:

    codice:
    gui = new myGui(); //interfaccia
    gui.addPanel("nome", "testo");
    quindi il metodo addPanel() definito dentro alla GUI deve poter aggiungere l'elemento con il nome e il testo passato. (x essere chiaro il nome va sul bordino dell'oggetto e il testo va dentro alla textbox)...

    qualcuno mi aiuta?
    alcool: la causa e la soluzione di tutti i problemi

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per prima cosa io mi costruirei una classe che mi rappresenta il pannellino con testo e bordo. Per il bordo puoi utilizzare la classe BorderFactory che mette a disposizione il metodo createTitledBorder().
    Poi, per poter avere 4 oggetti all'interno del Pannello devi decidere come visualizzarli: se ti va bene una griglia 2x2 puoi utilizzare un GridLayout, altrimenti puoi anche fare a meno del LayoutManager e gestirti a manina posizione e dimensione degli oggetti.
    Certo la cosa non è banale: dipende tutto da cosa vuoi veramente che avvenga nella tua applicazione.
    Il problema dell'aggiunta dinamica non sussiste: è sufficiente richiamare un validate() sul contenitore dopo ogni aggiunta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    grazie lele...

    io intanto sono riuscito a fare questo (finestra) ma voglio riuscire ad aggiungere elementi come ho fatto-a-manina-in-photoshop (risultato)...

    ecco quello che ho fatto fin'ora.. mi aiuti a fare l'elemento da aggiungere e il metodo per aggiungerlo?

    ho commentato tutto, se volete spiegazioni o riassiunti chiedete pure, non ignoratemi e basta

    codice:
    public class simGUI extends JFrame {
    	
    	// ---- Variables declaration
    
    	private static final long serialVersionUID = 3267784312751803558L;
    
    	// ---- contentPane
    	private JPanel contentPane;
    
    	// ----- pannelli per risorse
    	private JPanel jPanel_1;
    	private JPanel jPanel_2;
    	private JPanel jPanel_3;
    	private JPanel jPanel_4;
    	
    
    
    	// -----
    
    	// End of variables declaration
    
    	public simGUI() {
    		super();
    		initializeComponent();
    		this.setVisible(true);
    	}
    
    	private void initializeComponent() {
    
    		contentPane = (JPanel) this.getContentPane();
    		
    		// ----- istanzio pannelli per risorse
    		jPanel_1 = new JPanel();
    		jPanel_2 = new JPanel();
    		jPanel_3 = new JPanel();
    		jPanel_4 = new JPanel();
    
    
    		this.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				closeOperation();
    			}
    		});
    		
    		// ---- contentPane
    		contentPane.setLayout(null);
    		
    		// ---- aggiungo i pannelli al pannello contenitore
    		//addComponent(contentPane, jScrollPane_5, 37, 28, 30, 20);
    		//addComponent(contentPane, jScrollPane_6, 37, 56, 30, 20);
    		//addComponent(contentPane, jScrollPane_7, 37, 80, 30, 20);
    		addComponent(contentPane, jPanel_1, 15, 10, 618, 100);
    		addComponent(contentPane, jPanel_2, 15, 120, 618, 100);
    		addComponent(contentPane, jPanel_3, 15, 230, 618, 100);
    		addComponent(contentPane, jPanel_4, 15, 340, 618, 100);
    		
    		// ---- setto titoli e bordo
    		jPanel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		jPanel_1.setBorder(new TitledBorder(" Resource A "));
    		jPanel_2.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		jPanel_2.setBorder(new TitledBorder(" Resource B "));
    		jPanel_3.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		jPanel_3.setBorder(new TitledBorder(" Resource C "));
    		jPanel_4.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		jPanel_4.setBorder(new TitledBorder(" Resource D "));
    
    		// ---- setto il titolo, posizione e dimensione della finestra principale
    		this.setTitle("SimpleUI - Unifr.ch");
    		this.setLocation(new Point(0, 0));
    		this.setSize(new Dimension(800, 550));
    	}
    
    	/** Add Component Without a Layout Manager (Absolute Positioning) */
    	private void addComponent(Container container, Component c, int x, int y,
    			int width, int height) {
    		c.setBounds(x, y, width, height);
    		container.add(c);
    	}
    
    //===================================================================?????
    
    	// ---- metodo per aggiungere i pannellini dentro al pannello 1
    	public void addInterProcess(String pName) {
    		//??? come diavolo si fa???
    	}
    
    //===================================================================?????
    	
    	// ---- finestra chiusa = chiudi il programma
    	public void closeOperation() {
    		System.out.println("left: Good-bye!");
    		System.exit(1);
    	}
    }
    Immagini allegate Immagini allegate
    alcool: la causa e la soluzione di tutti i problemi

  4. #4
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    ecco il risultato che voglio... (0/4 é un testo che cambia, é uguale dove settarlo - textbox o label?)
    Immagini allegate Immagini allegate
    alcool: la causa e la soluzione di tutti i problemi

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'elemento da aggiungere puoi pensarlo come ad una classe a se stante. Esempio:
    codice:
    public class MioElemento extends JPanel {
       private JLabel lbl;
       public Elemento(String titolo, String contenuto) {
          setBorder( BorderFacroty.createTitledBorder( titolo ) );
          lbl = new JLabel( contenuto );
       }
    }
    Poi, per far sì che la classe fornisca un metodo che aggiunge un elemento ad un pannello, è sufficiente aggiungere la dichiarazione di tale metodo alla classe:
    codice:
    public class simGUI extends JFrame {
       ...
       public void aggiungiPannello(String titolo, String contenuto) {
          // Aggiunge un elemento al Pannello "Resource A"
          jPanel_1.add( new MioElemento(titolo, contenuto) );
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    sono riuscito a farlo... ma ho un problema...

    codice:
    public class GUIelement extends JPanel {
    	 private JLabel lbl;
    	   public JLabel theElement(String title, String content) {
    	      lbl = new JLabel( content );
    	      lbl.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    	      lbl.setBorder(new TitledBorder(title));
    	      return lbl;
    	   }
    }
    il problema avviene perché aggiungo glie elementi con il testo "0/4"... ma poi quando cambia una cosa nel mio programma, devo aggiornare questo testo a "1/4" e cosi via...

    ma dato che ho gia 3 elementi in una riga (risorsa A)... come faccio a modificare quello giusto??? ho provato a aggiungere ogni elemento con il comando

    jLabel_1.add(MioElemento, 0) dove 0 é un indice che cambia in base a un risultato nel programma.. ma java mi da sempre il seguente errore:

    illegal component position

    consigli???
    alcool: la causa e la soluzione di tutti i problemi

  7. #7
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    puo darsi che sia a causa del nome?

    perché ho provato a farlo manualmente:

    Jpanel_1.add(jPanel_x, 0);
    Jpanel_2.add(jPanel_y, 1);

    e funziona...

    ma se faccio

    Jpanel_1.add(jPanel_x, 0);
    Jpanel_2.add(jPanel_x, 1);

    mi da l'errore di prima!!!
    se cosi fosse: come risolvo?
    alcool: la causa e la soluzione di tutti i problemi

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Tutto dipende dal tipo di LayoutManager che hai usato. Il secondo parametro, infatti, indica la posizione in termini di "struttura": ciascun LayoutManager interpreta tale valore per assegnare graficamente la posizione del componente.
    Per fare quello che vuoi tu devi decidere come visualizzare i componenti. Devi cioè decidere preventivamente delle posizioni o arrangiarti a farlo a manina togliendo il LayoutManager.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.