I\'m currently working on a group project for a college course, and I\'ve hit a bit of a stumbling block. The program we have decided to implement is a Peer-to-Peer chat client
You need to tell Swing that the components are translucent, so it does also paint the background when repainting the changed components. For this, your components have to return false
from the isOpaque()
method (this can be achieved by setOpaque(false)
when no subclass overwrites isOpaque
to do something else).
With this, it should work without any manual repainting of everything, as the other answers proposed. (I already did this once.)
Edit: The reason for this is that Swing uses an optimized repainting-algorithm, repainting only these components which really need repainting (for example, a JTextField after some input) or components in front of such ones, as long as they are opaque. When a component needing repainting is not opaque (= filling its whole space with non-translucent color), also repainting of the components behind them is necessary.
myComponent.revalidate();
myComponent.repaint();
Not sure if it "force" the redraw, but it ask it to do it when possible.
Try JFrame.repaint()
. That should work. If you want custom designing of your JFrame
then you will have to override paint()
method of JFrame. Additionally, if you want each component to be custom designed you will have to override the paint()
method of each of your GUI component. Couple of things to note:
paint()
for any GUI component. You only need to call repaint()
.JButton
, JTextField
...], you do not have to call their repaint()
method. The parent Container
's [JFrame
, JPanel
...] repaint()
will do the job.