Как использовать JScrollPane в Java - PullRequest
1 голос
/ 22 марта 2012

Как мне получить скроллер вокруг моего JList-компонента в приведенном ниже коде? Кажется, он не работает должным образом: (

 public class JButtonO extends JFrame{

String[] values = {"henry", "Michael","Uche","John","Ullan","Nelly",
                              "Ime","Lekan","Austine","jussi","Ossi","Imam","Empo","Austine","Becky",
                             "Scholar","Ruth", "Anny"};

 public JButtonO()
{
   super("the button");
   this.setSize(400,200);
   JPanel panel =  new JPanel();
   JLabel label = new JLabel("Output Items:");
   label.setAlignmentX(1);
   label.setAlignmentY(1);
   JList conList = new JList(values);
   conList.setVisibleRowCount(3);
   JScrollPane scroller = new JScrollPane(conList);
   panel.add(label);
   panel.add(scroller);
   panel.add(conList);

   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.add(panel);
   this.setVisible(true);


}

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Достаточно добавить JScrollPane scroller, который включает JList conList, в JPanel panel. Ошибка в том, что вы добавляете JList во второй раз.

   JScrollPane scroller = new JScrollPane(conList);
   panel.add(label);
   panel.add(scroller);
   panel.add(conList); // <---THIS LINE SHOULD BE DELETED...
2 голосов
/ 22 марта 2012

JScrollPane имеет настройки, называемые политиками полосы прокрутки, которые указывают, когда должны быть отображены полосы прокрутки. Вы можете установить их, используя JScrolPane (Component, int, int) конструктор или вызывая setVerticalScrollBarPolicy() и setHorizontalScrollBarPolicy(). Политики по умолчанию «по необходимости», то есть полоса прокрутки отображается только в том случае, если компонент слишком велик для отображения целого. Поэтому, если ваш список помещается внутри окна, полосы прокрутки не будут видны, но станут видимыми, когда вы, например, уменьшить размер окна с помощью мыши. Вы можете изменить одну или обе политики на «всегда», используя соответствующие константы, чтобы полосы прокрутки всегда были видны, если это то, что вам нужно.

2 голосов
/ 22 марта 2012

Слушай, я не могу ответить на то, что тебе нужно, потому что я не помню большую часть разметки свинга.Я давно с ним не работаю ...

Но, удаляя настройку макета (я помню) на вашем JPanel, он работает с этим кодом:

public JButtonO() {
    super("the button");
    this.setSize(400, 200);

    // Create a panel with a borderlayout
    JPanel jpanel = new JPanel(new BorderLayout());

    JLabel label = new JLabel("Output Items:");
    label.setAlignmentX(1);
    label.setAlignmentY(1);
    // Add Label to top of layout
    jpanel.add(label, BorderLayout.NORTH);

    JList conList = new JList(values);
    conList.setVisibleRowCount(3);
    JScrollPane scroller = new JScrollPane(conList);
    //AddScroll to center
    jpanel.add(scroller);

    //Add Panel to JFrame
    this.add(jpanel);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);

  }

Я думаю, чтоПроблемы - это стандартный компоновщик JPanel.Из-за того, как это работает, ваш свиток не был «сжат» настолько, чтобы создавать свитки ...

Надеюсь, это поможет, даже без лишних объяснений ...

В действительности: после того, как я отправлю ответЯ видел вашу ошибку.Теперь я могу объяснить, что не так.Вы уже добавили свой JList в JScrollPane здесь:

JScrollPane scroller = new JScrollPane(conList);

Но после этого вы поместили его в JPanel:

panel.add(conList);

это изменится, где будет отображаться ваш JList, и позволитJScroll снова пусто.Без компонентов он будет отображаться с размером 0x0 и не будет отображаться (даже находясь там).

Теперь я думаю, что помог = D

...