Gå til innhold

Java: Skrive ut riktig antall \t!


Anbefalte innlegg

Hallaisen!

 

Sliter litt med å få skrevet ut tekst fra database skikkelig i et JTextArea. Jeg skal skrive ut resultatet av en spørring, men teksten står nå i hytt og pine rundt om på skjermen. Se bilde

 

Problemet er at teksten som skrives ut varierer veldig i lengde, og det derfor ikke er mulig å ha fastsatt på forhånd hvor mange \t'er det skal være i utskriften.

 

Prøvde å lage en metode for å sjekke det, men det funker ikke. Noen som kan hjelpe meg med denne, for jeg er sikkert helt på jordet!

public static String printRiktigAntallTabs(String tekst) {
       String tabs;
       if(tekst.length() <= 9) {
           tabs = tekst+"\t";
       }
       else if((tekst.length() > 9) && (tekst.length() < 18)) {
           tabs = tekst+"\t\t";
       }
       else if((tekst.length() > 18) && (tekst.length() < 27)) {
           tabs = tekst+"\t\t\t";
       }
       else if((tekst.length() > 27) && (tekst.length() < 36)) {
           tabs = tekst+"\t\t\t\t";
       }
       else {
           tabs = tekst+"\t";
       }
       return tabs;
   }
public String toString() {
 return  printRiktigAntallTabs(id) + printRiktigAntallTabs(navn) + 
   printRiktigAntallTabs(type) + printRiktigAntallTabs(beskrivelse) + 
   printRiktigAntallTabs(pris);
}

Endret av remi sture
Lenke til kommentar
Videoannonse
Annonse

Dersom du ønsker å benytte deg av JTextArea, må du gjøre følgende:

 

1. for hver kolonne, gå gjennom hver rad og finn max-lengde for kolonnen

2. Når du vet denne vet du hvor mange mellomrom du skal tilføre for å gjøre alle radene til kolonnen like lang

 

 

Det betyr med andre ord at du enten må gå gjennom resultatet 2 ganger eller lagre resultatet i en 2-dimensjonal matrise. Når du legger innholdet inn i matrisen regner du ut makslengden til hver kolonne. Deretter når du går gjennom matrisen for å skrive ut innholdet, legger du på riktig antall mellomrom.

 

En tredje metode er å endre lengden på samtlige kolonner til f.eks. 30 tegn. er kolonnen på 10 tegn legger du til 20 mellomrom. Er den på 40 tegn fjerner du 10. Det spørs hvor akseptabelt det er å ikke vise hele innholdet.

 

En fjerde mulighet er selvfølgelig å bruke JTable.

Lenke til kommentar

Takk for tips. Noen som kan gi meg et eksempel på bruk av JTable? Slik skriver jeg ut fra databasen nå:

public MatrettVo skrivUtMatrett(String type){
 Statement stmt;
 ResultSet rs;
    MatrettVo matrett = null;
    try {
     String sql = "SELECT * FROM Prosjekt." + type;	
 	stmt = con.createStatement();
 	rs = stmt.executeQuery(sql);
 	while(rs.next()) {
   matrett = new MatrettVo(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5));
   Gui.txaUtskrift.append(""+matrett+"\n");
 	}
 	rs.close();
 	stmt.close();    
 	return matrett;
 }
 catch(SQLException e){
 	System.out.println("Klarer ikke å utføre spørringen");
 	System.out.println(e.getMessage());
 	return matrett;
 }
}

public class MatrettVo {
private String id;
private String navn;
private String type;
private String beskrivelse;
private String pris;

// Konstruktør
public MatrettVo(String id, String navn, String type, String beskrivelse, String pris) {
 this.id = id;
 this.navn = navn;
 this.type = type;
 this.beskrivelse = beskrivelse;
 this.pris = pris;
}
// Få riktig antall tabs på utskrift
public static String printRiktigAntallTabs(String tekst) {
       String tabs;
       if(tekst.length() <= 9) {
           tabs = tekst.toLowerCase()+"\t\t";
       }
       else if((tekst.length() > 9) && (tekst.length() < 18)) {
           tabs = tekst.toLowerCase()+"\t\t";
       }
       else if((tekst.length() > 18) && (tekst.length() < 27)) {
           tabs = tekst.toLowerCase()+"";
       }
       else if((tekst.length() > 27) && (tekst.length() < 36)) {
           tabs = tekst.toLowerCase()+"\t\t\t\t";
       }
       else {
           tabs = tekst.toLowerCase()+"\t";
       }
       return tabs;
   }
public String toString() {
 return  printRiktigAntallTabs(id) + printRiktigAntallTabs(navn) + 
   printRiktigAntallTabs(type) + printRiktigAntallTabs(beskrivelse) + 
   printRiktigAntallTabs(pris);
}
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...