public void addLine(String newLine)
{
this.chat.add(newLine);
if (this.getHeight() < this.chat.size() * LINE_HEIGHT)
this.setSize(new Dimension(this.chat.size() * LINE_HEIGHT, this.getWidth()));
}
Указанный выше код неверен. Вы не должны пытаться играть с размером компонента.
Полосы прокрутки появятся автоматически, когда «предпочтительный размер» компонентов превышает размер области прокрутки.
Поэтому вы должны переопределить метод getPreferredSize()
вашего компонента. Поэтому ваш код должен выглядеть примерно так:
public void addLine(String newLine)
{
this.chat.add(newLine);
revalidate();
repaint();
}
@Override
public void getPreferredSize()
{
int height = chat.size() * LINE_HEIGHT;
return new Dimension(100, height);
}
Значение "width" должно быть параметром, который вы передаете своему классу, чтобы предложить ширину компонента по умолчанию.
Кроме того, вы рисуете заново изобретать колесо. JPanel перекрасит свой фон. Таким образом, код должен быть:
//g.setColor(Color.white);
//g.fillRect(0, 0, this.getWidth(), this.getHeight());
super.paintComponent(g);
И тогда вы вызовете:
setBackground( Color.WHITE );
в своем конструкторе.