static JPanel jTiledBackground_trackWidth(S imageID) { ret jTiledBackground_trackWidth(loadImage2(imageID)); } static JPanel jTiledBackground_trackWidth(final BufferedImage tileImage) { ret swing(func -> JPanel { ret new JPanel { protected void paintComponent(Graphics g) { paintTiledBackground(this, g, tileImage); } public Dimension getPreferredScrollableViewportSize() { ret getPreferredSize(); } public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { return 20; } public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { ret (direction == SwingConstants.HORIZONTAL ? visibleRect.width : visibleRect.height)*5/6; } public bool getScrollableTracksViewportWidth() { true; } public bool getScrollableTracksViewportHeight() { false; } }; }); } static JPanel jTiledBackground_trackWidth(S imageID, Component contents) { ret jTiledBackground_trackWidth(loadImage2(imageID), contents); } static JPanel jTiledBackground_trackWidth(BufferedImage tileImage, Component contents) { JPanel panel = jTiledBackground_trackWidth(tileImage); panel.setLayout(new BorderLayout); panel.add(BorderLayout.CENTER, jtransparent_recursive(contents)); ret panel; }