Swing JScrollBar fetter machen?

  • Themenstarter Themenstarter tuxedo
  • Beginndatum Beginndatum
T

tuxedo

Gast
Hat jemand eine Idee wie man einen JScrollBar fetter machen kann? Also den Scrollbalken dicker/breiter, sowie die Buttons mit den Pfeilen größer? Natürlich möglichst ohne selbst ein komplettes LaF zu erstellen.

Breiter hab ich das ganze schon bekommen:

Java:
JScrollBar verticalScrollBar = jScrollPanel.getVerticalScrollBar();
verticalScrollBar.setPreferredSize(new Dimension(width*2, height));

Original war die Scrollbar 15px breit. Lässt sich problemlos aufblasen. Aber die Buttons zum scrollen bleiben in der Höhe gleich. Die werden nur in der Breite gestreckt.

Any ideas?

Gruß
Alex
 
Ich vermute mal, dass es vom Look and Feel abhängt. Das Setzen des UIDefaults
Code:
ScrollBar.width
funktioniert zumindest in Metal und Windows:
Java:
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class ScrollBarWidth {
	private static final String UI_DEFAULT = "ScrollBar.width";
	
	private static JScrollPane createJScrollPaneWithScrollBarWidth(final int width) {
		final int oldWidth = UIManager.getInt(UI_DEFAULT);
		UIManager.put(UI_DEFAULT, width);
		final JScrollPane scrollPane = new JScrollPane();
		UIManager.put(UI_DEFAULT, oldWidth);
		return scrollPane;
	}
	
	public static void main(final String[] args) {
		final int size = 500;
		final int columns = 5;
		
		final class TestView extends JPanel {
			{
				setPreferredSize(new Dimension(size / columns, size));
			}
		}
		
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				final JFrame frame = new JFrame();
				frame.setLayout(new GridLayout(1, columns));
				
				for (int i = 0; i < columns; i++) {
					final JScrollPane scrollPane = createJScrollPaneWithScrollBarWidth(10 * (i + 1));
					scrollPane.setViewportView(new TestView());
					frame.add(scrollPane);
				}
				
				frame.setSize(size, size);
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}
}
 
Zuletzt bearbeitet:
Danke für den Tipp. Jetzt wo du's schreibst fällt's mir auch wieder ein dass man die LaFs hier und da anpassen kann... Hatte diese Möglichkeit irgendwie "verdrängt" ;-)

Gruß
Alex
 

Zurück
Oben