Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-06-2009, 11:19   #1
Cory
Member
 
L'Avatar di Cory
 
Iscritto dal: Jan 2009
Città: Trento
Messaggi: 81
[Java] Problemi layout e JTextArea

Ciao a tutti! Sto ceracando di realizzare un'applicazione come la seguente:



cliccando su "TIRA" simulo il tiro di un dado generando casualmente un numero compreso tra 1 e 6. Ogni JTextArea tiene traccia dei numeri usciti e ogni volta che esce il rispettivo numero scrive nella relativa area il numero di giro a cui esce. Con "RESET" cancello lo storico dei numeri e torno alla situazione iniziale.
Ora, non riesco a riprodurre il Layout (sto usando come LAyout Manager il GridBagLayout) e non riesco nemmeno a fare in modo che il testo delle colonne sia allineato in cima e che il numero di tiro in cui esce ogni numero si scriva sotto e non sostituisca il numero iniziale. Vi copio il codice:

Codice:
package darts;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;

public class Freccette extends JFrame {

    public static void main(String [] args){

        JFrame x=new JFrame("Freccette");
        x.setSize(400, 300);
        x.setContentPane(new Pannello());
        x.setDefaultCloseOperation(EXIT_ON_CLOSE);
        x.setVisible(true);
        x.setResizable(true);
    }
}


public class Pannello extends JPanel {

int width=this.getWidth();
int height=this.getHeight();
int larg=width/6;
JLabel lab1;
JLabel lab2;
JButton tira;
JButton reset;
JFormattedTextField text;
JTextArea tf1;
JTextArea tf2;
JTextArea tf3;
JTextArea tf4;
JTextArea tf5;
JTextArea tf6;

public Pannello(){

    this.setBackground(Color.WHITE);
    this.setLayout(new GridBagLayout());
    GridBagConstraints c=new GridBagConstraints();
    c.fill=GridBagConstraints.VERTICAL;
    /*
     setto il layout del pannello */

    //Posiziono la label nel pannello
    lab1=new JLabel("Ultimo numero uscito:");
    c.fill=GridBagConstraints.FIRST_LINE_START;
    c.gridx=0;
    c.gridy=0;
    add(lab1,c);

    text=new JFormattedTextField("0");
    c.fill=GridBagConstraints.CENTER;
    c.gridx=1;
    c.gridy=0;
    add(text,c);

    tira=new JButton("TIRA IL DADO");
    c.fill=GridBagConstraints.FIRST_LINE_END;
    c.gridx=2;
    c.gridy=0;
    add(tira,c);
    tira.addActionListener(new Tiro());

    lab2=new JLabel("Storico dei numeri usciti:");
    c.fill=GridBagConstraints.FIRST_LINE_START;
    c.gridx=0;
    c.gridy=1;
    add(lab2,c);

    reset=new JButton("RESET");
    reset.addActionListener(new Reset());
    c.fill=GridBagConstraints.FIRST_LINE_END;
    c.gridx=3;
    c.gridy=1;
    add(reset,c);

    tf1=new JTextArea("1");
    tf1.setName("1");
    tf1.setPreferredSize(new Dimension(100,150));
    c.gridx=0;
    c.gridy=2;
    add(tf1,c);

    tf2=new JTextArea("2");
    tf2.setName("1");
    tf2.setPreferredSize(new Dimension(100,150));
    c.gridx=1;
    c.gridy=2;
    add(tf2,c);


    }

//implementazione dei vari actionlistener

class Tiro implements ActionListener {

    int i=0;

        public void actionPerformed(ActionEvent e) {

        Random generatore=new Random(System.currentTimeMillis()/17);
        Integer intero=generatore.nextInt((6)+1);
        System.out.println(intero);
        text.setText(String.valueOf(intero));
        i++;
        System.out.println("Giro numero:" + i);

        if(intero==Integer.parseInt(tf1.getName()))
            tf1.append("Tiro " + i);

        if(intero==Integer.parseInt(tf2.getName()))
            tf2.setText("Tiro " + i);

        if(intero==Integer.parseInt(tf1.getName()))
            tf1.setText("Tiro " + i);

        if(intero==Integer.parseInt(tf1.getName()))
            tf1.setText("Tiro " + i);

        if(intero==Integer.parseInt(tf1.getName()))
            tf1.setText("Tiro " + i);

        if(intero==Integer.parseInt(tf1.getName()))
            tf1.setText("Tiro " + i);
        
        }
    }

class Reset implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            tf1.setText("");
        }
    }
}
Se vi va di aiutarmi...grazie
Cory è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2009, 14:26   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il codice è corretto, è solo che ti sei fermato. Tieni presente che GridBagLayout costruisce l'interfaccia attraverso delle relazioni tra tutti i componenti che gestisce il che lo rende non incrementale: è solo quando hai aggiunto tutti i componenti che l'interfaccia assume l'aspetto che deve. E' per questo che si usa uno schema di riferimento. Un esempio di schema di riferimento per la tua interfaccia, con i valori di GridBagConstraints che ne risultano, è questo:



Se metti tutti i valori e tutti i componenti salta fuori l'interfaccia schematizzata. Se ne salti uno o ometti un valore viene fuori una schifezza.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2009, 14:49   #3
Cory
Member
 
L'Avatar di Cory
 
Iscritto dal: Jan 2009
Città: Trento
Messaggi: 81
ok grazie per la dritta

invece sai aiutarmi con i JTextField? come faccio ad allineare verso l'alto il testo?
e come faccio ad aggiungere ad onig volta che esce un numero un riga con il relativo numero di tiro ?
Cory è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2009, 15:16   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Per aggiungere del testo è corretto usare textArea.append come già fai. Tieni presente che una JTextArea supporta un solo formato di carattere quindi non puoi aggiungere un linea di intestazione centrata e poi inserire altre linee di testo con un formato diverso. Devi aggiungere un componente (una JLabel) da mettere sopra all'area di testo. Nello schema che ho ripostato queste etichette sono i componenti da C5 a C10.

Una volta che le sei aree di testo andranno ad occupare tutta la superficie disponibile alle loro celle quando farai un append il testo andrà al posto giusto.

Comunque fai uno schema e seguilo. Ad esempio alla griglia nell'immagine che ho incollato (che è una delle possibili configurazioni) consegue de plano il codice:

Codice:
import java.awt.*;
import javax.swing.*;

public class Main {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			
			public void run() {
				start();
			}
		});
	}
	
	private static void start() {
		class Lim extends GridBagConstraints {
			Lim(int x, int y, int gw, int gh) {
				gridx = x;
				gridy = y;
				gridwidth = gw;
				gridheight = gh;
			}
			
			Lim ins(int v) { insets = new Insets(v, v, v, v); return this; }
			Lim anc(int v) { anchor = v; return this; }
			Lim fill(int f) { fill = f; return this; }
			Lim wx(double v) { weightx = v; return this; }
			Lim wy(double v) { weighty = v; return this; }
		};
		
		JComponent[] components = {
			new JLabel("Ultimo numero uscito"),
			new JTextField(4),
			new JButton("Tira il dado"),
			new JLabel("Storico numero usciti"),
			new JButton("Reset"),
			new JLabel("1", JLabel.CENTER),
			new JLabel("2", JLabel.CENTER),
			new JLabel("3", JLabel.CENTER),
			new JLabel("4", JLabel.CENTER),
			new JLabel("5", JLabel.CENTER),
			new JLabel("6", JLabel.CENTER),
			new JScrollPane(new JTextArea(20, 8)),
			new JScrollPane(new JTextArea(20, 8)),
			new JScrollPane(new JTextArea(20, 8)),
			new JScrollPane(new JTextArea(20, 8)),
			new JScrollPane(new JTextArea(20, 8)),
			new JScrollPane(new JTextArea(20, 8)),
		};
		
		JPanel container = new JPanel(new GridBagLayout());
		container.add(components[0], new Lim(0, 0, 3, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[1], new Lim(3, 0, 2, 1).ins(4).anc(Lim.WEST));
		container.add(components[2], new Lim(5, 0, 2, 1).ins(4).anc(Lim.WEST));
		container.add(components[3], new Lim(0, 1, 2, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[4], new Lim(3, 1, 1, 1).ins(4).anc(Lim.WEST));
		container.add(components[5], new Lim(0, 2, 1, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[6], new Lim(1, 2, 1, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[7], new Lim(2, 2, 2, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[8], new Lim(4, 2, 2, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[9], new Lim(6, 2, 2, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[10], new Lim(8, 2, 1, 1).fill(Lim.HORIZONTAL).ins(4));
		container.add(components[11], new Lim(0, 3, 1, 1).fill(Lim.BOTH).wy(1).wx(1).ins(4));
		container.add(components[12], new Lim(1, 3, 1, 1).fill(Lim.BOTH).wx(1).ins(4));
		container.add(components[13], new Lim(2, 3, 2, 1).fill(Lim.BOTH).wx(1).ins(4));
		container.add(components[14], new Lim(4, 3, 2, 1).fill(Lim.BOTH).wx(1).ins(4));
		container.add(components[15], new Lim(6, 3, 2, 1).fill(Lim.BOTH).wx(1).ins(4));
		container.add(components[16], new Lim(8, 3, 1, 1).fill(Lim.BOTH).wx(1).ins(4));
		
		JFrame window = new JFrame("Test");
		window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		window.add(container);
		window.pack();
		window.setVisible(true);
	}
}
Che produce una GUI identica allo schema:



Lo schema è la chiave di GridBagLayout, una volta che ce l'hai devi solo battere dei numeri.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Cowboy Space Corp. presenta il suo razzo...
Per NetSuite il vantaggio nell'IA sta ne...
Scoperta la zona d'origine del segnale W...
La Stazione Spaziale Internazionale cont...
La Difesa statunitense ha pubblicato la ...
vivo X500 Pro e Pro Max ufficiali: tanta...
iOS 27.2: l'iPhone chiede ai numeri scon...
Final Cut Pro integra MotionVFX e Apple ...
iMac M6 da 1.829 euro, MacBook Pro 14 M6...
RayNeo GT a 313,65€ su Amazon: occhiali ...
NVIDIA e Meta: 3 miliardi di dollari e p...
PHP2Shell: sfruttate attivamente le due ...
Raffreddamento passivo senza elettricità...
La deforestazione in Amazzonia crolla a ...
La luce del sole a mezzanotte, ecco come...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v