/ / JEditorPane wewnątrz JScrollPane nie pokazuje paska przewijania - java, swing, jeditorpane, jscrollbar

JEditorPane wewnątrz JScrollPane nie wyświetla paska przewijania - java, swing, jeditorpane, jscrollbar

Usiłuję osadzić stronę internetową w JScrollPanektóry znajduje się wewnątrz JEditorPane, który jest prostokątem wewnątrz JFrame, Jak w HTML, jak masz stronę internetową, a następnie może mieć mały prostokąt gdzieś na stronie internetowej, który ma iframe innej strony internetowej. Powodem, dla którego mam prostokąt zdefiniowany przy użyciu setBounds, jest to, że prostokąt jest mniejszy niż rzeczywiste okno, ponieważ w oknie są inne elementy.

        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);

Odpowiedzi:

3 dla odpowiedzi № 1

Uprościłem twój kod. Następujące prace.

Miałeś wiele dodatkowych stwierdzeń, które komplikowały takie rzeczy, jak dodawanie web dwa razy (raz, aby przewinąć i raz w JFrame).

Innym przykładem jest scrollPane.getVerticalScrollBar().setValue(0); . Pasek przewijania domyślnie zaczyna się od zera.

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 dla odpowiedzi nr 2

Dlaczego używasz setBounds()? To czyni twoją JEditorPane rozmiar bezwzględny, tj. nie można zmieniać rozmiaru i JScrollPane działa tylko wtedy, gdy zmienia rozmiar. Usuń setBounds().

Ponadto dodajesz JEditorPane do twojego okna, a nie do JScrollBar więc pomijasz funkcjonalność JScrollBar.

wprowadź opis obrazu tutaj

Więc zmiana ostatnich linii rozwiązuje problem

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