Хочу при добавлении своего компонента в JScrollPane добиться такого же поведения, как у JEditorPane. При уменьшении размера окна, собственный компонент будет стараться, также как и JEditorPane, уменьшить свой размер, и только при достижении минимального размера будет прокручиваться.
Пример 1 (JEditorPane):
| Код | import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JScrollPane;
public class MyExample01 extends JFrame {
/** * @param args */ public static void main(String[] args) {
MyExample01 окно = new MyExample01(); окно.pack(); окно.setVisible(true); }
public MyExample01() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
JEditorPane текст = new JEditorPane(); текст.setContentType("text/html"); текст.setEditable(false);
String строка = "<html>aaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa<br>" + "bbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb<br>" + "cccccccccccccccccccccccc cccccccccc cccccccccc cccccccccc cccccccccc<br>" + "dddddddddddddddddddddddddd dddddddddd dddddddddd dddddddddd dddddddddd<br>";
текст.setText(строка);
JScrollPane скролл = new JScrollPane(текст);
getContentPane().add(скролл);
}
}
|
Пример 2 (собственный компонент):
| Код | import java.awt.Dimension; import java.awt.Rectangle;
import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.Scrollable; import javax.swing.border.BevelBorder;
public class MyExample02 extends JFrame {
/** * @param args */ public static void main(String[] args) {
MyExample02 окно = new MyExample02(); окно.pack(); окно.setVisible(true);
}
public MyExample02() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
MyComponent текст = new MyComponent();
текст.setBorder(new BevelBorder(BevelBorder.RAISED));
String строка = "<html>aaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa<br>" + "bbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb<br>" + "cccccccccccccccccccccccc cccccccccc cccccccccc cccccccccc cccccccccc<br>" + "dddddddddddddddddddddddddd dddddddddd dddddddddd dddddddddd dddddddddd<br>";
текст.setText(строка);
JScrollPane скролл = new JScrollPane(текст);
getContentPane().add(скролл); }
}
class MyComponent extends JLabel implements Scrollable {
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize(); }
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 1; }
public boolean getScrollableTracksViewportHeight() {
return false; }
public boolean getScrollableTracksViewportWidth() {
return true; }
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 1; }
}
|
Интересует как сделать так, чтобы:- при уменьшенни окна по горизонтали появлялась прокрутка, только тогда, когда компонент уже не может умешить свои размеры
- компонент растягивал себя в JScrollPane так же как и JEditorPane
|