/ / JEditorPane всередині JScrollPane не відображає смугу прокручування - java, swing, jeditorpane, jscrollbar

JEditorPane всередині JScrollPane не показує смугу прокрутки - java, swing, jeditorpane, jscrollbar

Я намагаюся вставити веб-сторінку в JScrollPaneякий знаходиться в JEditorPane, який є прямокутником всередині JFrame, як в HTML, як у вас є веб-сторінка, а потім може мати невеликий прямокутник десь на веб-сторінці, яка має iframe іншої веб-сторінки. Причина, по якій у мене є прямокутник, визначений за допомогою setBounds, полягає в тому, що прямокутник менше, ніж фактичне вікно, оскільки у вікні є інші елементи.

        JEditorPane web = new JEditorPane();
web.setEditable(false);

try {
web.setPage("http://www.example.com");
}catch (IOException e) {
web.setContentType("text/html");
web.setText("<html>Could not load</html>");
}
final JScrollPane scrollPane = new JScrollPane(web);
getContentPane().add(scrollPane);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scrollPane.getVerticalScrollBar().setValue(0);
}
});
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(250, 145));
scrollPane.setMinimumSize(new Dimension(10, 10));
rweb = new Rectangle(20, 20, 1150, 600);
web.setBounds(rweb);
window.add(web);

Відповіді:

3 для відповіді № 1

Я спростив ваш код. Наступні роботи.

У вас було багато додаткових заяв, які ускладнювали такі речі, як додавання web два рази (один раз для прокрутки та один раз для JFrame).

Інший приклад scrollPane.getVerticalScrollBar().setValue(0); . За промовчанням смуга прокрутки починається з нуля.

import java.awt.Dimension;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

public class webPane extends JFrame {

public static void main(String args[])
{
webPane e = new  webPane();
e.setVisible(true);
}


public webPane() {

JEditorPane web = new JEditorPane();
web.setEditable(false);

try {
web.setPage("http://www.cnn.com");
} catch (IOException e) {
web.setContentType("text/html");
web.setText("<html>Could not load</html>");
}

final JScrollPane scrollPane = new JScrollPane(web);
getContentPane().add(scrollPane);
this.setBounds( 0, 0, 200, 200);

}

}

2 для відповіді № 2

Чому ви використовуєте setBounds()? Це робить ваш JEditorPane незмінні розміри і JScrollPane працює тільки, якщо змінюється розмір. Видалити setBounds().

Крім того, ви додаєте JEditorPane до вашого вікна, а не до JScrollBar тому ви пропускаєте функціональність JScrollBar.

введіть опис зображення тут

Так що просто зміна останніх рядків виправляє вашу проблему

//rweb = new Rectangle(20, 20, 1150, 600);
//web.setBounds(rweb);
window.add(scrollPane);