sql >> Database teknologi >  >> RDS >> PostgreSQL

Table Print passer ikke til sidestørrelsen

Der er to mulige muligheder, du kan prøve at ændre størrelsen på kolonnerne, så de er jævnt fordelt over den tilgængelige sidebredde, ELLER du kan skalere det resulterende output OP, så det passer til siden.

Skalering

Som standard er TablePrintable skaleres kun NED, hvilket tvinger en JTable der er for stor til at passe inden for den tilgængelige sidestørrelse (bredde). Du kan ændre dette for at tillade det også at skalere OP.

Det stykke kode, der beregner skalaen, er inden for print af TablePrintable klasse og ligner...

double sf = 1.0D;
if (printMode == JTable.PrintMode.FIT_WIDTH && totalColWidth > imgWidth) {

    // if not, we would have thrown an acception previously
    assert imgWidth > 0;

    // it must be, according to the if-condition, since imgWidth > 0
    assert totalColWidth > 1;

    sf = (double) imgWidth / (double) totalColWidth;
}

Den del, vi er interesseret i, er if sætning, som lyder "hvis printmode er lig med FIT_WIDTH OG totalColWidth er større end sidebredden"...Vi vil ændre dette til kun at læse ""hvis printmode er lig med FIT_WIDTH"...

Du kan ændre

if (printMode == JTable.PrintMode.FIT_WIDTH && totalColWidth > imgWidth) {

til

if (printMode == JTable.PrintMode.FIT_WIDTH) {

som nu vil tillade TablePrintable for både at skalere tabellen OP og NED...

Hvilket vil resultere i noget som...

  • Top er skærmens output
  • Til venstre er det aktuelle resultat
  • Højre er det skalerede resultat

Ændre størrelse på kolonner

Dette er lidt mere tricky og BØR aldrig anvendes på en JTable der allerede er på skærmen, da dette vil rode med hvordan det faktisk vises...

Dybest set, når tabellen er udskrevet, vil vi tilsidesætte kolonnebredderne for at give dem lige stor plads på tværs af siden...

Først skal vi ændre totalColWidth i TablePrintable fra...

private final int totalColWidth;

til

private int totalColWidth;

fordi vi skal være i stand til at ændre værdien efter den er initialiseret...

Dernæst har vi brug for et flag for at afgøre, om kolonnerne er blevet ændret eller ej, da det er spild at skulle opdatere deres størrelser gentagne gange, hver gang print kaldes.

Tilføj private boolean updateColumnWidths; til felterne i TablePrintable (for eksempel under private final Font footerFont; )

Nu, når print kaldes, skal vi træffe en række beslutninger...

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

    // for easy access to these values
    final int imgWidth = (int) pageFormat.getImageableWidth();
    final int imgHeight = (int) pageFormat.getImageableHeight();

    if (imgWidth <= 0) {
        throw new PrinterException("Width of printable area is too small.");
    }

    // Have we modified the column widths yet??
    if (!updateColumnWidths) {

        // Only update the column widths if the current total column width
        // is less then the available imgWidth (page width)
        if (totalColWidth < imgWidth) {

            // Calculate the required column width to allow the columns to
            // span the page...
            int columnCount = table.getColumnCount();
            int columnWidth = (int) (imgWidth / (float) columnCount);
            TableColumnModel columnModel = table.getColumnModel();
            // Update the columns...
            for (int col = 0; col < columnModel.getColumnCount(); col++) {
                TableColumn tc = columnModel.getColumn(col);
                tc.setMinWidth(columnWidth);
                tc.setMaxWidth(columnWidth);
                tc.setPreferredWidth(columnWidth);
                tc.setWidth(columnWidth);
            }
            // Update the totalColWidth, this should prevent
            // any scaling been applied
            totalColWidth = columnModel.getTotalColumnWidth();
            
        }
        updateColumnWidths = true;

    }
    //...

Hvilket genererer noget som...




  1. Best Practices for Multi-Language Database Design

  2. Alt du behøver at vide om SQL CTE på ét sted

  3. xampp MySQL starter ikke

  4. Oracle sql:rækkefølge efter og distinkt klausul