Кому принадлежит цвет краев прокручиваемой области просмотра Java Swing? - PullRequest
3 голосов
/ 27 июня 2011

У меня есть JScrollPane с JPanel, который реализует Scrollable в качестве вида окна просмотра.Когда я устанавливаю ScrollableTracksViewportHeight и ScrollableTracksViewportWidth в false, моя панель остается в своем предпочтительном размере.Хорошо.Проблема в том, что я не могу понять, кому принадлежит пространство вокруг прокручиваемой панели.Я чувствую, что пытался изменить фон каждого компонента и диалога, и ничто, похоже, не делает этого.Как я могу изменить уродливый серый на забавный цвет, например, неоновый желтый?

Вот скриншот того, о чем я говорю:

Вот что яхочу:

enter image description here

А вот код для дублирования первого изображения:

package components;

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class DialogWithScrollPane extends JFrame {

  ScrollablePanel scrollablePanel;

  public DialogWithScrollPane() {
    super();

    setResizable(true);

    Container pane = getContentPane();

    scrollablePanel = new ScrollablePanel();

    final JScrollPane scrollPane = new JScrollPane();
    scrollPane.setPreferredSize(new Dimension(300,300));
    scrollPane.setViewportView(scrollablePanel);
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    pane.add(scrollPane);

    setMinimumSize(new Dimension(300, 300));        
    setVisible(true);
  }

  class ScrollablePanel extends JPanel implements Scrollable {

    public ScrollablePanel() {
      super();

      setBackground(Color.red);
      setPreferredSize(new Dimension(200, 100));
    }

    public Dimension getPreferredScrollableViewportSize() {
      return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
      return 0;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
      return 0;
    }

    public boolean getScrollableTracksViewportHeight() {
      return false;
    }

    public boolean getScrollableTracksViewportWidth() {
      return false;
    }

  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new DialogWithScrollPane();
      }
    });
  }
}

Ответы [ 2 ]

4 голосов
/ 27 июня 2011
scrollPane.getViewport().setBackground(Color.yellow);
4 голосов
/ 27 июня 2011

Это все принадлежит JViewport, который вы можете нарисовать любым желаемым цветом, как показано здесь .

...