It just depends.
If your class is part of an exported API and you have reason to believe that the clients of your API will have occasion to use a setter then it may make good sense to include one.
Here's the truth about getters and setters, though.
If your class has them, then your class is mutable. Mutable data and mutable objects are what they are. If your design intent specifies that this API will always be single-threaded, then you have no problems.
However, even in single-threaded apps, you should aspire to create immutable objects wherever possible. The downside to immutable objects is that there is no role for getters and setters in them (** see note).
A compromise is the Builder Pattern (Bloch, et al. Effective Java 2nd Ed.). In this patters, you use a mutable helper object to set the fields for your object ... and then when you're ready, your helper object uses the data you've set to create an immutable instance of the object you want.
Use mutable objects when your needs are simple and there's no concerns over contention or concurrency. But remember, the more mutable your object is, the harder it is to reason about its state. And the harder it is to reason about its state, the potentially more difficult it is to enforce invariants and maintain security. An object that can have only one state solves almost all of these problems. Especially if your class is a value class, you should try to create immutable objects when you can.
(**) note: it is, of course, possible to have setters for an immutable class. In such a case, the setter instantiates a new, immutable object, thus preserving its immutability. The String class relies upon this strategy.