Newsgroup: it.comp.java
Titolo: importi giustificati a destra

Dovrei stampare incolonnando degli importi e destra.
Come si fa a giustificare degli importi a destra?
 
In visulbasic ricavavo la larghezza in mm della stringa di testo e la 
sottraevo alla coordinata x.
In Java?
 
-- 
Gulp®
(forse mi sono perso qualcosa :))

 sottraevo alla coordinata x.
 
Cioe` tu lavoravi con le stringhe contando i millimetri? 

Il 05/10/15 17:49, 4ndre4 ha scritto:

  Forse mi sono espresso male:
  Printer.CurrentX = 184 - Printer.TextWidth(Format(importoriga(i).Text, 
"##,##0.00"))
 
184 sono millimetri



Ad esempio in un JTextField?
In tal caso in java e' molto piu semplice usa il metodo:
textField.setHorizontalAlignment(JTextField.RIGHT);
Se invece si tratta di una cella di tabella, dovresti usare i 
TableColumnModel, configurando ogni TableColumn fornendo un 
TableCellRenderer che operi l'allineamento.
 
Stante che puoi fare nello stesso modo del visulbasic, con la differenza 
che le coordinate sono in pixel e non in mm, e possono essere relative 
allo schermo o al sistema di coordinate del contenitore dipendentemente 
dal metodo che usi.
Inoltre potrebbe essere che il tuo campo sia definito con una lunghezza 
maggiore di quella visualizzata, e le cose ovviamente potrebbero essere 
diverse da quanto atteso, nel senso che se allineato a sinistra potresti 
vedere un valore troncato, mentre se allineato a destra potresti non 
vederlo affato nel caso che il valore da visualizzare sia inferiore 
all'area non visualizzata..
 
 

 Ad esempio in un JTextField?
 
No non un JTextfiled.
 
Devo giustificare a destra una serie di importi, ma per una stampa su carta.
 
  String cod=txtCod[i].getText();
  String des=txtDescrizione[i].getText();
  String qt=txtQuantita[i].getText();
  String imp=txtImportoriga[i].getText();
 
  g2d.drawString(cod, 35,y);
  g2d.drawString(des, 95, y);
  g2d.drawString(qt, 440, y);
  g2d.drawString(imp, 510, y);
 
Ma l'ultima riga di codice dovrebbe essere modificata per ottenere un 
allineamento a destra dei numeri di importo, quindi quel 510 non 
dovrebbe essere tale ma 510- la larghezza di imp.
Come scrivevo a 4ndre4 in basic sarebbe:
 
Printer.CurrentX = 510 - Printer.TextWidth(imp)


On Monday, 5 October 2015 18:01:43 UTC+1, Gulp®  wrote:
 
[...]
 
    private static String formatNumberWithWidth(int number, int width) {
        return String.format("%"+width+"d", number);
    }
 
    public static void main(String[] args) {
	   System.out.println(formatNumberWithWidth(2550, 50));
    }
 
Trova il modo di ricavare quel width in millimetri. 
 
 


Capisco, in ogni caso la string imp non ha una dimensione fissa, dipende 
dal font con cui la scrivi. Poiche' il font fa parte dell'oggetto 
Graphics, che utilizzi per drwString. Il font di solito proviene dal 
contesto da cui prelevi l'oggetto Graphics, oppure da uno impostato, 
comunque con g2d.getFont(). Utilizzando tale font puoi calcolare la 
dimensione il pixel da utilizzare per calcolare la dimensione della tua 
stringa. Ad esempio:
 
Font font = g2d.getFont();
FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(font);
int width = fm.charsWidth(text.toCharArray(), 0, text.length);
 
 
 
 

 int width = fm.charsWidth(text.toCharArray(), 0, text.length);
 
Mi da un problema:
FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(fonti);
 
getFontMetrics nel codice viene barrato come non fosse disponibile.


No, in realtà funziona lo stesso. Ti ringrazio molto Ugo. Ciao


In java mi sono rassegnato a lavorare in unità punti, anche se in un 
caso particolare, dovendo stampare alcuni dati su un modulo prestampato 
(una ricevuta sanitaria) ho creato una classe di conversione che mi 
permette di impostare in millimetri in fase di stesura del codice, così 
riesco ad incasellare i dati al loro posto.
 
ringrazio di aver risposto.
Ciao



 
in COBOL è tutto automatico
PIC 9999,99 in automatico i soli numeri li allinea a destra
PIC XXXXXX JUST RIGHT   alfanumerico allineato a destra
 
ti basta fare la MOVE.
 
troppo facile!
 
-- 
(..) la rivoluzione non è un pranzo di gala, non è una festa letteraria, 
non è un disegno o un ricamo; non si può
fare con tanta eleganza, con tanta serenità e delicatezza, con tanta 
grazia e cortesia. La rivoluzione è un atto
di violenza, è l'azione implacabile di una classe che abbatte il potere 
di un'altra classe. (Mao Tze-tung)


Il metodo e' marcato deprecato dal jdk 1.2, il javadoc suggerisce di 
utilizzare un oggetto LineMetrics, che pero' non ha metodi 'comodi come 
FontMetrics.
Dagli altri post ho capito che devi stampare su una stampante, quindi 
immagino che tu stia utilizzando l'interfaccia Printable, in tal caso 
dovresti utilizzare  g2d.getFontMetrics() oppure g2d.getFontMetrics(font)
 
Ti segnalo anche il metodo:
int width = fm.stringWidth(text);
che fa esattamente la stessa cosa del metodo che ti avevo consigliato in 
precedenza, charsWidth, che e' quello che utilizzo per abitudine.
 


Risposta da facilone. E se il font e' tipografico? In tal caso in COBOL 
non hai nessun modo.
 


anche qua vieni a rompermi il cazzo? dottorazzo saccente tuttologo del 
cazzo!



Da che pulpito...
A te in materia di rottura non t'insegna niente nessuno: sei il 
disturbatore per antonomasia.
Poi mi piacerebbe sapere cosa vieni a fare tu in questo n.g., che di 
java ne hai sentito parlare forse. Quindi l'unica possibilita' e' quella 
di trollare. CVD
 

 cazzo!
 
Ma tu sei sempre stato cosi`? O c'e` stato una linea di separazione, un momento in cui sei passato al lato oscuro della forza, perdendo di netto la capacita` di scrivere cose intelligenti? Devi per forza riempire i ng di stronzate? C'e` stato anche un tempo in cui eri normale e, magari, scrivevi cose intelligenti?
No, perche`, una persona con la psicologia come la tua, sarebbe stata pericolosa persino in IBM - dove notoriamente non sfuggiva niente, in fase di recruitment, e prendevano solo quelli col cazzo piu` lungo di 30 cm.