سؤال

الجميع،

أنا أواجه مشكلة باستخدام JTextarea و JScrollpane. لسبب ما ، يبدو أن جزء التمرير لا يتعرف على السطر الأخير في المستند ، وسيتم التمرير لأسفل إلى السطر فقط قبله. لا يتغير شريط التمرير إلى حالة يمكنني من خلالها تحريكها حتى تكون الخطوط الواردة في المستند أكبر من عدد الخطوط التي يظهرها Textarea (يجب أن يحدث بمجرد أن يكون أكبر).

هل واجه أي شخص هذا من قبل؟ ما الذي سيكون حلاً جيدًا (أريد تجنب الاضطرار إلى إضافة خط "فارغ" إضافي إلى نهاية المستند ، والذي سأضطر إلى إزالته في كل مرة أضيف فيها خطًا جديدًا)؟

إليكم كيف أقوم بتثبيت Textarea و Scrollpane:

JFrame frame = new JFrame("Java Chat Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = frame.getContentPane();
if (!(pane.getLayout() instanceof BorderLayout)) {
    System.err.println("Error: UI Container does not implement BorderLayout.");
    System.exit(-1);
}

textArea = new JTextArea();
    textArea.setPreferredSize(new Dimension(500, 100));
    textArea.setEditable(false);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
JScrollPane scroller = new JScrollPane(textArea);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    pane.add(scroller, BorderLayout.CENTER);

فيما يلي الطريقة التي أستخدمها لإضافة سطر جديد إلى Textarea:

public void println(String a)
{
    textArea.append(" "+a+"\n");
    textArea.setCaretPosition(textArea.getDocument().getLength());
}

شكرا لمساعدتك،

جوناثان

تحرير: أيضًا ، كملاحظة جانبية ، مع الكود الحالي الذي يجب علي التمرير إليه يدويًا. لقد افترضت أن setCaretPosition (doc.getLength ()) في طريقة println (السطر) من شأنها تعيين الصفحة تلقائيًا إلى الأسفل بعد إدخال السطر ... هل يجب أن يكون هذا هو الحال ، أم أنني بحاجة إلى القيام بشيء مختلف؟

هل كانت مفيدة؟

المحلول

المشكلة هي textArea.setPreferredSize(new Dimension(500, 100));

إزالة ذلك. قم بتعيين epferredsize من scrollpane أو حجم إطارك بدلاً من ذلك

نصائح أخرى

هل هذا حل؟ لم أختبرها ، لذا من فضلك لا تقتلني.

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top