How to balance and format String in java swing
I know that there are many previous explanations, but similar to my problem I did not find !
Simply i have a code to drow a bill info using graphics2d !
My Full Code IS :
public PageFormat getPageFormat(PrinterJob pj) {
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
double middleHeight = 99999;
double headerHeight = 2.0;
double footerHeight = 2.0;
double width = convert_CM_To_PPI(8); //printer know only point per inch.default value is 72ppi
double height = convert_CM_To_PPI(headerHeight + middleHeight + footerHeight);
paper.setSize(width, height);
paper.setImageableArea(
0,
2,
width,
height - convert_CM_To_PPI(1)
); //define boarder size after that print area width is about 180 points
pf.setOrientation(PageFormat.PORTRAIT); //select orientation portrait or landscape but for this time portrait
pf.setPaper(paper);
return pf;
}
protected static double convert_CM_To_PPI(double cm) {
return toPPI(cm * 0.393600787);
}
protected static double toPPI(double inch) {
return inch * 72d;
}
public class BillPrintable implements Printable {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
int result = NO_SUCH_PAGE;
if (pageIndex == 0) {
Graphics2D g2d = (Graphics2D) graphics;
double width = pageFormat.getImageableWidth();
g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());
FontMetrics metrics = g2d.getFontMetrics(new Font("TimesRoman", Font.BOLD, 7));
int idLength = metrics.stringWidth("000");
int amtLength = metrics.stringWidth("000000");
int qtyLength = metrics.stringWidth("00000");
int priceLength = metrics.stringWidth("000000");
int prodLength = (int) width - idLength - amtLength - qtyLength - priceLength - 17;
int productPosition = 0;
int discountPosition = prodLength + 5;
int pricePosition = discountPosition + idLength + 10;
int qtyPosition = pricePosition + priceLength + 4;
int amtPosition = qtyPosition + qtyLength;
try {
/*Draw Header*/
int y = 20;
int yShift = 10;
int headerRectHeight = 15;
int headerRectHeighta = 40;
String itiname;
String CatToGetID;
double couniti;
double iticounter;
String proptoremove;
nf.setMaximumFractionDigits(2);
int v = modelUpper.getRowCount();
int h = modelUpper.getRowCount();
String[] strArray = new String[v];
String[] strCount = new String[v];
String[] strAmount = new String[v];
for (int x = 0; x < v; x++) {
proptoremove = String.valueOf(modelUpper.getValueAt(x, 3));
proptoremove = proptoremove.replace("NOK", "");
proptoremove = proptoremove.replace(" ", "");
proptoremove = proptoremove.replace(",", "");
iticounter = Double.parseDouble(String.valueOf(modelUpper.getValueAt(x, 1)));
couniti = Double.valueOf(proptoremove);
itiname = String.valueOf(modelUpper.getValueAt(x, 0));
strArray[x] = itiname;
strCount[x] = Double.toString(iticounter);
strAmount[x] = Double.toString(couniti);
}
cpuntAll = Double.valueOf(pricetoset);
g2d.setFont(new Font("TimesRoman", Font.CENTER_BASELINE, 14));
g2d.drawString(" -::: " + DashBord.MineName.getText().replace("Restaurant -", "") + " :::-", 16, y);
y += yShift;
g2d.setFont(new Font("TimesRoman", Font.CENTER_BASELINE, 10));
g2d.drawString("", 12, y);
y += headerRectHeight;
g2d.drawString("Iteam Name | Quantity | Total ", 10, y);
y += yShift;
g2d.drawString("--------------------------------------------------------", 10, y);
y += headerRectHeight;
g2d.setFont(new Font("monospaced", Font.BOLD, 10));
for (int q = 0; q < h; q++) {
String ss = String.format("%-3s %7s %10s", strArray[q], arformat.format(Double.valueOf(strCount[q])), arformat.format(Double.valueOf(strAmount[q])) + " NOK");
g2d.drawString(ss, 10, y);
y += yShift;
}
g2d.setFont(new Font("TimesRoman", Font.CENTER_BASELINE, 10));
g2d.drawString("--------------------------------------------------------", 10, y);
y += yShift;
y += yShift;
g2d.setFont(new Font("monospaced", Font.BOLD, 10));
g2d.drawString((String.format("%-3s %s", "Totil: ", arformat.format(cpuntAll) + " NOK")), 10, y);
y += yShift;
y += yShift;
g2d.setFont(new Font("TimesRoman", Font.CENTER_BASELINE, 10));
g2d.drawString("--------------------------------------------------------", 10, y);
y += yShift;
y += yShift;
g2d.setFont(new Font("monospaced", Font.BOLD, 12));
g2d.drawString((String.format("%-3s %s", "Invoice Number :", arformat.format(Double.valueOf(InvNum)))), 10, y);
y += yShift;
y += yShift;
g2d.drawString("CashOut By : " + DashBord.NameLogIn.getText(), 10, y);
y += yShift;
y += yShift;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-M-yyyy hh:mm:ss");
LocalDateTime now = LocalDateTime.now();
g2d.drawString("Time And Date : " + dtf.format(now), 10, y);
y += yShift;
y += yShift;
g2d.setFont(new Font("TimesRoman", Font.CENTER_BASELINE, 10));
g2d.drawString("--------------------------------------------------------", 10, y);
} catch (NumberFormatException r) {
}
result = PAGE_EXISTS;
}
return result;
}
}
the output is like this :
my problim is in this line :
String ss = String.format("%-3s %7s %10s", strArray[q], arformat.format(Double.valueOf(strCount[q])), arformat.format(Double.valueOf(strAmount[q])) + " NOK");
After i used a String.format
it is must do the center of the text so it will be like this !.
To clarify more, I want the Autobot to be as this example :
--------------------------------
|Iteam Name | Quantity | Total |
--------------------------------
|Test 3 15 NOK
|Shawerma 2 27.2 NOK
--------------------------------
Totil: 42.2 NOK
--------------------------------
Invoice Number : 16
CashOut By : IT
Time And Date : 31-3-2021 02:10:20
--------------------------------
Any Help ?
from Recent Questions - Stack Overflow https://ift.tt/3rCOWKb
https://ift.tt/3cDTqfj
Comments
Post a Comment