Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java JTextArea multiline help

one problem I'm having is i have 2 JTextAreas and i need to add a list of items to them. The problem I'm running into is the string doesn't automatically move to the next line when it reaches the end of the JTextArea. So to solve this problem I tried this: (sorry if my code is kinda sloppy.)

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

}

any help on what i could do different or change would be much appreciated

like image 817
Michael Rentmeister Avatar asked Jul 15 '11 16:07

Michael Rentmeister


2 Answers

JTextArea has setLineWrap(...) and the setWrapStyleWord(...) methods. Perhaps all you need to do is call these on your JTextArea's setting both to true.

One bit of criticism: your code is very hard to interpret as you give no indication which variables are JTextAreas (which I'm guessing are "Include" and "Exclude"), and no comments as to what is doing what. Please write your questions here with the idea that we know nothing about your code and can't read minds. The clearer your question, usually the easier it is to answer. Thanks.

like image 88
Hovercraft Full Of Eels Avatar answered Sep 30 '22 17:09

Hovercraft Full Of Eels


Maybe a better solution is to use JList. See How to Use Lists.

The code you posted is not complete. If you still want to use a text area solution then post your SSCCE that demonstrates the problem.

like image 20
camickr Avatar answered Sep 30 '22 16:09

camickr