Понадобилось мне тут вывести лог с пролистыванием в окошко. GUI пишу сам, вручную, поскольку, что netbeans, что idea, рожают такую дикую непотребщину, что разгрести ее или поправить потом просто нереально. Итак, казалось бы простая задача, бился несколько часов с матами большой многоэтажности.
Приведу сразу код, а затем свои ошибки (отмечу, что я ни разу не гуру в Java)
Код:
Log = new JTextArea();
Log.setEditable(false);
Log.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
JScrollPane SP=new JScrollPane(Log);
SP.setPreferredSize(new Dimension(780, 400));
SP.setAutoscrolls(true);
vbar = SP.createVerticalScrollBar();
vbar.setAutoscrolls(true);
DefaultCaret caretL = (DefaultCaret)Log.getCaret();
caretL.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
...
JPanel.add(SP);
что меня подвело - во-первых, я сначала назначил панели BorderLayout, в результате чего достаточно долго пытался наколбасить совмещение нескольких текстовых окон, чтобы они не перекрывали друг друга или не зажимали размер соседа в 0. По непонятной для меня причине на размер влияет только setPreferredSize, хотя есть setMinimumSize. Во-вторых, к моей большой радости, выяснилось, что без JScrollPane текст не только без скроллбаров, но и в принципе не пролистывается. И в-третьих, самое, что меня дольше всего мучило, если для JTextArea выставить setPreferredSize, то пролистываться текст будет неправильно, т.е. в нижнем положении скроллбара будет видна в лучшем случае половина текста. Очень много у меня ругательного в адрес разрабов Java :( Какая-то странная логика у этого языка при создании GUI.