I faced some problem while working in last project. I want to share some tricks which I used in jasper report and in dynamic jasper.

1. Add combination of string and parameter/field value in textfield dynamically. Normally we put in expression either field/parameter value or string. If we are going to set String with field/parameter value then its little bit tricky. It always create trouble for me while try to insert expression.

Here is a scenario how we generate jasper design.

public JasperDesign createDesign() throws JRException {
        JasperDesign jasperDesign = new JasperDesign();
/*Set basic design of page.*/
        jasperDesign.setName("sampleDynamicJasperDesign");
        jasperDesign.setPageWidth(595); // page width
        jasperDesign.setPageHeight(842); // page height
        jasperDesign.setColumnWidth(515);   // column width of page
        jasperDesign.setColumnSpacing(0);
        jasperDesign.setLeftMargin(40);
        jasperDesign.setRightMargin(40);
        jasperDesign.setTopMargin(20);
        jasperDesign.setBottomMargin(20);

        JRDesignExpression expression = new JRDesignExpression();

        //Set style of page.
        JRDesignStyle normalStyle = new JRDesignStyle();
        normalStyle.setName("Sans_Normal");
        normalStyle.setDefault(true);
        normalStyle.setFontName("DejaVu Sans");
        normalStyle.setFontSize(12);
        normalStyle.setPdfFontName("Helvetica");
        normalStyle.setPdfEncoding("Cp1252");
        normalStyle.setPdfEmbedded(false);
        jasperDesign.addStyle(normalStyle);


        /*
        * Generate field dynamically
        * */

        JRDesignField field = new JRDesignField();
        field.setName("firstName");
        field.setValueClass(String.class);
        jasperDesign.addField(field);

        field = new JRDesignField();
        field.setName("lastName");  // set name for field.
        field.setValueClass(String.class);  // set class for field. Its always depends upon data type which we want to get in this field.
        jasperDesign.addField(field);   // Added field in design.

        field = new JRDesignField();
        field.setName("age");
        field.setValueClass(Integer.class);
        jasperDesign.addField(field);

        JRDesignBand band = new JRDesignBand();

        //Title Band
        band = new JRDesignBand();
        band.setHeight(30);


        JRDesignStaticText staticText = new JRDesignStaticText();
        staticText.setText("Person's Specification");
        staticText.setX(0);
        staticText.setY(0);
        staticText.setHeight(20);
        staticText.setWidth(515);
        staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
        band.addElement(staticText);
        jasperDesign.setTitle(band);


//        Detail Band
        band = new JRDesignBand(); // New band
        band.setHeight(20); // Set band height

        /*Create text field dynamically*/
        JRDesignTextField textField = new JRDesignTextField();
        textField.setX(0);  // x position of text field.
        textField.setY(0);  // y position of text field.
        textField.setWidth(160);    // set width of text field.
        textField.setHeight(20);    // set height of text field.
        JRDesignExpression jrExpression = new JRDesignExpression(); // new instanse of expression. We need create new instance always when need to set expression.
        jrExpression.setText(""" + "First Name: " + """ + "+" + "$F{firstName}"); //  Added String before field in expression.
        textField.setExpression(jrExpression);  // set expression value in textfield.
        band.addElement(textField); // Added element in textfield.

        textField = new JRDesignTextField();
        textField.setX(160);
        textField.setY(0);
        textField.setWidth(160);
        textField.setHeight(20);
        jrExpression = new JRDesignExpression();
        jrExpression.setText("$F{lastName}" + "+" + """ + " :Last Name" + """); // Added string after field value
        textField.setExpression(jrExpression);
        band.addElement(textField);

        textField = new JRDesignTextField();
        textField.setX(320);
        textField.setY(0);
        textField.setWidth(160);
        textField.setHeight(20);
        jrExpression = new JRDesignExpression();
        String age = """ + "<font>" + """ + "+" + """ + "Age is: " + """ + "+" + """ + "</font><font>" + """ + "+" + "$F{age}" + "+" + """ + "</font>" + """;  // added html in text field with different color.
        jrExpression.setText(age);
        textField.setExpression(jrExpression);
        textField.setMarkup("html"); // By Default markup is none, We need to set it as html if we set expression as html.
        band.addElement(textField);
        ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);


        return jasperDesign;
    }

Here is explanation how we insert value in textfield expression.
First scenario for String with field.

 JRDesignExpression jrExpression = new JRDesignExpression(); // new instanse of expression. We need create new instance always when need to set expression.
        jrExpression.setText(""" + "First Name: " + """ + "+" + "$F{firstName}"); //  Added String 

before field in expression.

When we write expression then at the end of the day It looks like this in reportExpression:

"First Name: " +  $F{firstName}

Thats makes sense for textfield expression.
Second scenario:

String age = """ + "<font>" + """ + "+" + """ + "Age is: " + """ + "+" + """ + "</font><font>" + """ + "+" + "$F{age}" + "+" + """ + "</font>" + """;  // added html in text field with different color.
        jrExpression.setText(age);

It will show in textfieldExpression:

"<font color="#66FF33">"+"Age is: "+"</font><font color="#6600FF">"+$F{age}+"</font>"

Hope it will help you to add expression in text field.