2011-07-15 14 views
6

Jeden problem, który mam, to mam 2 JTextAreas i muszę dodać listę elementów do nich. Problem, który napotykam, jest ciągiem, który nie przechodzi automatycznie do następnego wiersza, gdy osiągnie koniec JTextArea. Tak, aby rozwiązać ten problem, próbowałem to: (przepraszam, jeśli mój kod jest trochę zaniedbany.)Java JTextArea multiline help

public void setIncludeAndExclude(ArrayList<JComboBox> boxes){ 
    String in = "",ex = ""; 
    String[] inSplit, exSplit; 


    boolean[] include = new boolean[boxes.get(0).getModel().getSize()-1]; 
    for(int i = 0; i < boxes.size(); i ++){ 
     if(boxes.get(i).getSelectedIndex() != 0){ 
      include[boxes.get(i).getSelectedIndex() -1] = true; 
     } 
    } 

    for(int i = 0; i < include.length; i ++){ 
     if(include[i]){ 
      //numToItem is a method that turns an int into a string e.g. 1 = "Acesss Doors" 
      in += (numToItem(i+1)+ ", "); 
     }else{ 
      ex += (numToItem(i+1)+ ", "); 
     } 
    } 

    //take off the last comma 
    in = in.substring(0,in.lastIndexOf(",")); 
    ex = ex.substring(0,ex.lastIndexOf(",")); 

    //get how many lines there should be   
    inSplit = new String[(in.length()/100) +1]; 
    exSplit = new String[(ex.length()/100) +1]; 

    String temp;   
    int istart = 0, iend = Math.min(100, in.length()), estart = 0, eend = Math.min(100, ex.length()); 

    for(int i = 0; i < inSplit.length; i ++){ 
     try{ 
      temp = in.substring(istart, iend); 
      int Iindex = temp.lastIndexOf(","); 
      temp = ex.substring(estart, eend); 
      int Eindex = temp.lastIndexOf(","); 
      inSplit[i] = in.substring(istart, Iindex); 
      exSplit[i] = ex.substring(estart, Eindex); 
      istart = Iindex; iend = Math.min(iend + 100, in.length()); 
      estart = Eindex; eend = Math.min(eend + 100, ex.length()); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    //reset in and ex to ""  
    in = ""; ex = ""; 

    //set in and ex to the new string with newline characters 
    for(int i = 0; i < inSplit.length; i ++){ 
     in += inSplit[i] + "\n"; 
     ex += exSplit[i] + "\n"; 
    } 

    //set the text of the JTextAreas 
    Include.setText(in); 
    Exclude.setText(ex); 

} 

żadnej pomocy na co mogłem zrobić inaczej lub zmiana byłaby znacznie ceniona

Odpowiedz

7

JTextArea ma metody setLineWrap(...) i setWrapStyleWord(...). Być może wszystko, co musisz zrobić, to zadzwonić do nich w ustawieniu JTextArea zarówno na true.

Jedna część krytyki: Twój kod jest bardzo trudny do interpretacji, ponieważ nie podajesz żadnych zmiennych, które są JTextAreas (które, jak przypuszczam, są "Uwzględnij" i "Wyklucz"), i nie ma komentarzy co do tego, co robi . Proszę napisać tutaj swoje pytania z myślą, że nic nie wiemy na temat twojego kodu i nie potrafimy czytać w myślach. Im jaśniejsze jest twoje pytanie, zazwyczaj łatwiej jest odpowiedzieć. Dzięki.

+0

To pomogło i zadziałało bardzo dziękuję! = D –

+2

@ Michael: jeśli to pomogło, to w górę głosuj odpowiedzi, jeśli rozwiązuje problem "zaakceptuj" odpowiedź. Nie edytuj tytułu pytania, aby określić go jako "zamknięty", ponieważ ma on zupełnie inne znaczenie na tym forum. Sugeruje to, że członkowie forum zamknęli to pytanie jako nieadekwatne lub nieodpowiednie. –

3

Może lepszym rozwiązaniem jest użyj JList. Zobacz How to Use Lists.

Kod, który wysłałeś, nie jest kompletny. Jeśli nadal chcesz skorzystać z rozwiązania do obsługi obszaru tekstowego, opublikuj swoją SSCCE, która pokazuje problem.

+0

JList pominął wiele metod w porównaniu z JTable z tylko jedną kolumną TableColumn i bez TableHeader +1 – mKorbel

+1

@ Michael: rozwiązanie camickr może być lepsze (1+). Dobrze byś to sprawdził. –