sql >> Databasteknik >  >> RDS >> PostgreSQL

Table Print passar inte till sidstorleken

Det finns två möjliga alternativ du har, du kan försöka ändra storleken på kolumnerna så att de är jämnt fördelade över den tillgängliga sidbredden ELLER så kan du skala upp resultatet UPP så att det passar sidan.

Skalning

Som standard är TablePrintable skalar bara NER, vilket tvingar fram en JTable som är för stor för att passa inom den tillgängliga sidstorleken (bredd). Du kan ändra detta så att det också kan skalas UPP.

Kodbiten som beräknar skalan ligger inom print i TablePrintable klass och ser ut som...

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 är intresserade av är if uttalande, som lyder "om utskriftsläge är lika med FIT_WIDTH OCH totalColWidth är större än sidbredden"...Vi vill ändra detta till att endast läsa ""om utskriftsläge är lika med FIT_WIDTH"...

Du kan ändra

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

till

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

vilket nu tillåter TablePrintable för att både skala tabellen UPP och NER...

Vilket kommer att resultera i något som...

  • Överst är skärmutgången
  • Till vänster är det aktuella resultatet
  • Höger är det skalade resultatet

Ändra storlek på kolumner

Detta är lite mer knepigt och BÖR aldrig tillämpas på en JTable som redan finns på skärmen, eftersom det kommer att störa hur det faktiskt visas...

I grund och botten, när tabellen skrivs ut, kommer vi att åsidosätta kolumnbredderna för att ge dem lika utrymme över sidan...

Först måste vi ändra totalColWidth i TablePrintable från...

private final int totalColWidth;

till

private int totalColWidth;

eftersom vi måste kunna ändra värdet efter att det har initierats...

Därefter behöver vi en flagga för att avgöra om kolumnerna har modifierats eller inte, eftersom det är ett slöseri att behöva uppdatera sina storlekar upprepade gånger varje gång print kallas.

Lägg till private boolean updateColumnWidths; till fälten i TablePrintable (till exempel under private final Font footerFont; )

Nu, när print kallas, måste vi fatta en rad beslut...

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;

    }
    //...

Vilket genererar något som...




  1. Förstå effekterna av hög latens i High Availability MySQL- och MariaDB-lösningar

  2. Varför SQL-prestandajustering är den viktigaste databashanteringsförmågan att ha

  3. Lista över datumformat som är tillgängliga med CONVERT() i SQL Server

  4. Vad är en betrodd anslutning?