Панель прокрутки в JFrame не отображается - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь поставить полосу прокрутки на рамку, но она не работает, я не вижу полосу прокрутки.

Это мой код:

Popup noticePopup = new Popup("Notice", 1500, 900);
JPanel noticePanel = new JPanel();
noticePanel.setPreferredSize(new Dimension(1500,1000));
List<List> ListNote = controller.Medicament.consultationNotice(medocSelectStr);
String noticeThis =null;
for(int n=0;n<ListNote.size();n++) {
    noticeThis = (String) ListNote.get(n).get(1);
}
JTextArea noticeArea = new JTextArea(noticeThis);
noticePopup.add(noticePanel);
noticePanel.add(noticeArea);
JScrollPane jScrollPane = new JScrollPane( noticePanel);
// only a configuration to the jScrollPane...
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

// Then, add the jScrollPane to your frame
noticePopup.getContentPane().add(jScrollPane);

JScrollPane scroll=new JScrollPane(noticePanel,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
noticePopup.getContentPane().add(scroll);

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Я вижу много потенциальных проблем:

Popup noticePopup = new Popup("Notice", 1500, 900);
JPanel noticePanel = new JPanel();
noticePanel.setPreferredSize(new Dimension(1500,1000));

Не пытайтесь вручную кодировать размер рамки или панели:

  1. вы не знаете, с каким разрешением людибудет использовать
  2. числа, которые вы предоставляете, не имеет смысла.Ширина панели не может быть такой же, как у рамки, потому что рамка имеет границы.Высота не может быть другой на 100, потому что панель будет расширена, чтобы заполнить доступное пространство.

Если вы хотите, чтобы рамка занимала весь экран, тогда вы просто используете:

noticePopup.setExtendedState(JFrame.MAXIMIZED_BOTH);

Что вы ожидаете от следующего кода:

for (int n=0; n < ListNote.size(); n++) 
{
    noticeThis = (String) ListNote.get(n).get(1);
}

если у вас есть более одного элемента в списке, вы просто заменяете текст в переменной "noteThis" на последний элемент всписок.

Вместо этого вы должны добавить текст в текстовую область:

JTextArea noticeArea = new JTextArea(5, 20);

for (int n = 0; n < ListNote.size(); n++) 
{
    if (n > 0 ) noticeArea.append("\n");

    noticeArea.append( (String)ListNote.get(n).get(1) );
}

Почему у вас есть "notePanel":

noticePanel.add(noticeArea);
JScrollPane scroll=new JScrollPane(noticePanel, ...);
noticePopup.getContentPane().add(scroll);

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

Просто добавьте текстовую область непосредственно в область прокрутки.и полосы прокрутки появятся по мере необходимости:

JScrollPane scroll=new JScrollPane(noticeArea, ...);
noticePopup.add(scroll);

Обратите внимание, что вам не нужно использовать getContentPane(), так как JDK1.4.

1 голос
/ 15 марта 2019

Вы создаете две полосы прокрутки с одинаковым содержимым:

 JScrollPane jScrollPane = new JScrollPane( noticePanel);

и:

JScrollPane scroll=new JScrollPane(noticePanel,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

И вы добавляете их обоих во всплывающее окно, и вы такжедобавление панели уведомлений во всплывающее окно, поэтому требуется удалить большой код

                Popup noticePopup = new Popup("Notice", 1500, 900);
                JPanel noticePanel = new JPanel();
                noticePanel.setPreferredSize(new Dimension(1500,1000));
                List<List> ListNote = controller.Medicament.consultationNotice(medocSelectStr);
                String noticeThis =null;
                for(int n=0;n<ListNote.size();n++) {
                    noticeThis = (String) ListNote.get(n).get(1);
                }
                JTextArea noticeArea = new JTextArea(noticeThis);
                noticePanel.add(noticeArea);

                JScrollPane scroll=new JScrollPane(noticePanel,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
                noticePopup.getContentPane().add(scroll);
...