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 № 1Uproś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
.
Więc zmiana ostatnich linii rozwiązuje problem
//rweb = new Rectangle(20, 20, 1150, 600);
//web.setBounds(rweb);
window.add(scrollPane);