Установка размера JPanel или JOptionPane

Итак, я хочу как-то установить размер моего JOptionPane - без его установки он слишком велик для моих целей и не будет выглядеть красиво. вот мой код:

   JScrollPane scrollpane = new JScrollPane(); 
   String categories[] = { "1. Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One", "2. Problem Two", "3. Extended Family", "4. Extended Family", "5. Extended Family"};
   JList list = new JList(categories);
   errorListCellRenderer cellRenderer = new errorListCellRenderer();
   list.setCellRenderer(cellRenderer);
   scrollpane = new JScrollPane(list);
   JPanel panel = new JPanel(); 
   panel.add(scrollpane);
   JOptionPane.showMessageDialog(null, panel, "Error List",  
                                          JOptionPane.PLAIN_MESSAGE);

когда я устанавливаю размер JPanel как таковой:

panel.setPreferredSize(new Dimension(500, 200));

полоса прокрутки исчезает и, следовательно, отображается не все.

Любые идеи? Java n00b...


person BigBug    schedule 13.01.2013    source источник


Ответы (3)


Внесите следующие изменения и посмотрите;

  1. Не помещайте JScrollPane в другую панель. Передайте JScrollPane непосредственно в showMessageDialog().

  2. Также используйте scrollPane.getViewport().add(list);

РЕДАКТИРОВАТЬ: я только что попробовал следующее, и полоса прокрутки видна для меня по мере увеличения элементов.

 JScrollPane scrollpane = new JScrollPane(); 
       String categories[] = { "1. Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One", "2. Problem Two", "3. Extended Family", "4. Extended Family", "5. Extended Family"
               ,"6. Extended Family","7. Extended Family","8. Extended Family","9. Extended Family"};
       JList list = new JList(categories);

       scrollpane = new JScrollPane(list);

       JPanel panel = new JPanel(); 
       panel.add(scrollpane);

       scrollpane.getViewport().add(list);
       JOptionPane.showMessageDialog(null, scrollpane, "Error List",  
                                              JOptionPane.PLAIN_MESSAGE);

скриншот прилагается;

введите здесь описание изображения

person dinukadev    schedule 13.01.2013
comment
1. не помещая его на панель, это не меняет размер и не исправляет его ... у меня изначально было так, но потом я понял, что знаю, как изменить размер панели, и что изменение размера панели приведет к помощь. однако это создало еще одну проблему. 2. Я могу внести это изменение, но это не решит проблему.. - person BigBug; 13.01.2013
comment
Смысл использования панели прокрутки состоит в том, чтобы поместить в нее элементы, тем самым позволяя ей решать, показывать ли полосы прокрутки при увеличении размера. Таким образом, нет смысла оборачивать панель прокрутки внутри другой панели. Что вы можете сделать, так это поместить список в панель и поместить эту панель в панель прокрутки. - person dinukadev; 13.01.2013
comment
я сделал изменения, которые вы предлагаете сейчас. однако полоса прокрутки по-прежнему не отображается. вместо этого вся коробка становится все больше и больше по мере того, как я добавляю все больше и больше записей - это нежелательно, так как она станет слишком большой. что мне нужно изменить, чтобы сохранить полосу прокрутки и не сделать поле таким большим? спасибо за вашу помощь кстати - person BigBug; 13.01.2013
comment
Я также пытался добавить вертикальную политику полосы прокрутки: scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); но полоса прокрутки никогда не появляется, если я не изменю ее на ВСЕГДА - в этот момент она появляется, но не работает... поле все еще становится слишком большим - person BigBug; 13.01.2013
comment
Привет еще раз, я только что отредактировал свой пост, чтобы включить образец, который я только что попробовал на своем рабочем месте eclipse. Полоса прокрутки была видна для меня. Вы можете попробовать фрагмент кода, который я только что разместил в разделе EDIT. Это работает. - person dinukadev; 13.01.2013
comment
Привет :) я понял, почему это не работает с вашей помощью. я поместил список в таблицу html, чтобы я мог сохранить ширину списка на разумной длине и позволить тексту располагаться на нескольких строках вместо одной строки. однако это все портит ... думаю, мне нужно найти решение для этого. Спасибо хоть! - person BigBug; 13.01.2013
comment
рад помочь :). Вы можете попробовать обернуть текстовую область в средстве визуализации списка и обернуть текст внутри этой текстовой области. Хотя просто идея. Ваше здоровье. - person dinukadev; 13.01.2013
comment
Совет по снимкам экрана: Alt+Print Screen захватит только область выделенного графического интерфейса. +1 - person Andrew Thompson; 13.01.2013

Если вы просто хотите изменить размер окна JOptionPane, вы можете сделать это с помощью UIManager. Как это:

UIManager.put("OptionPane.minimumSize",new Dimension(500,500)); 
JOptionPane.showMessageDialog(null, "Hi " );
person Lori    schedule 09.10.2014

дайте панели прокрутки предпочтительный размер, затем добавьте ее непосредственно в optionPane

String categories[] = { "1. Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One Problem One",
                       "2. Problem Two", "3. Extended Family", "4. Extended Family", "5. Extended Family"};
JList list = new JList(categories);
JScrollPane scrollpane = new JScrollPane(list);
scrollpane.setPreferredSize(new Dimension(300,125));//<-----any size you want
JOptionPane.showMessageDialog(null, scrollpane, "Error List",JOptionPane.PLAIN_MESSAGE);
person Michael Dunn    schedule 13.01.2013