sql >> Database >  >> RDS >> PostgreSQL

Tabelafdruk past niet op paginaformaat

Er zijn twee mogelijke opties:u kunt proberen de kolommen te verkleinen zodat ze gelijkmatig over de beschikbare paginabreedte worden verdeeld OF u kunt de resulterende uitvoer OMHOOG schalen zodat deze op de pagina past.

Schaal

Standaard is de TablePrintable schaalt alleen OMLAAG, waardoor een JTable . wordt geforceerd die te groot is om binnen het beschikbare paginaformaat (breedte) te passen. Je kunt dit wijzigen zodat het ook OMHOOG kan worden geschaald.

Het stukje code dat de schaal berekent, bevindt zich binnen de print van de TablePrintable klasse en ziet eruit als...

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;
}

Het deel waarin we geïnteresseerd zijn, is de if statement, die luidt:"Als printmode gelijk is aan FIT_WIDTH EN de totaleColWidth is groter dan de paginabreedte"...We willen dit veranderen om alleen ""als printmode gelijk is aan FIT_WIDTH" te lezen...

Je zou kunnen veranderen

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

naar

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

waarmee nu de TablePrintable om zowel de tabel OMHOOG als OMLAAG te schalen...

Wat zal resulteren in iets als...

  • Bovenaan is de schermuitvoer
  • Links is het huidige resultaat
  • Rechts is het geschaalde resultaat

Formaat van kolommen wijzigen

Dit is wat lastiger en MOET nooit worden toegepast op een JTable dat al op het scherm staat, omdat dit zal knoeien met hoe het daadwerkelijk wordt weergegeven...

Kortom, wanneer de tabel wordt afgedrukt, gaan we de kolombreedten overschrijven om ze gelijke ruimte over de pagina te geven...

Eerst moeten we totalColWidth . wijzigen in TablePrintable van...

private final int totalColWidth;

naar

private int totalColWidth;

omdat we de waarde moeten kunnen wijzigen nadat deze is geïnitialiseerd...

Vervolgens hebben we een vlag nodig om te bepalen of de kolommen zijn gewijzigd of niet, want het is zonde om telkens opnieuw de grootte te moeten bijwerken print wordt gebeld.

Voeg private boolean updateColumnWidths; naar de velden van TablePrintable (bijvoorbeeld onder private final Font footerFont; )

Nu, wanneer print wordt genoemd, moeten we een reeks beslissingen nemen...

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;

    }
    //...

Dat genereert iets als...




  1. Converteer een Juliaanse dag naar een datum in PostgreSQL

  2. Hoe refcursor resultaat/output te zien in Oracle SQL Developer?

  3. Wat is een gratis tool om twee SQL Server-databases te vergelijken?

  4. Hoe te updaten vanuit SELECT in SQL Server