Arhn - архитектура программирования

Добавление JPanel и JScrollingPane в JFrame

В настоящее время я работаю над окном для графического интерфейса для системы баз данных. Я пытаюсь иметь JScrollPane и JPanel в одном и том же JFrame. В основном мне нужна часть, в которой пользователь может прокручивать данные, а затем часть внизу, которая не прокручивается, где есть кнопки для изменения сортировки. В настоящее время, когда я пытаюсь открыть окно, отображается только JPanel. Я знаю, что JScrollPane работает сам по себе, потому что если я закомментирую часть, где добавлена ​​JPanel, она будет работать так, как должна.

public class ViewWindow
{
   DataContainer data;
   JFrame viewWin;
   DaysUntil days;
   JPanel contentPane;
   JScrollPane scroll;
   EmptyBorder border;
   DateFormat dateformat;
   Integer[] map;
   SortTest sor;
   JButton dayUntil, index, name;

   public ViewWindow(DataContainer da)
   {
       data= da;
       days= new DaysUntil();
       sor= new SortTest(data,days);
       viewWin= createWindow();
       JScrollPane main= createMainPanel();
       JPanel sortPane= createSortPanel();
       viewWin.getContentPane().add(main);
       viewWin.getContentPane().add(sortPane);
       viewWin.pack();
       viewWin.setVisible(false);

  }

Вот часть кода для createMainPanel()

public JScrollPane createMainPanel()
   {
      DateFormat dateformat =new SimpleDateFormat("MM/dd/yy");
      border = new EmptyBorder(10,20,10,20);
      JPanel mainPane= new JPanel();
      mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));

      JPanel titlePane= new JPanel();
      titlePane.setLayout(new BoxLayout(titlePane, BoxLayout.Y_AXIS));

      contentPane= new JPanel();
      contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));

      JPanel indexPane= new JPanel();
         indexPane.setLayout(new BoxLayout(indexPane, BoxLayout.Y_AXIS));
         JLabel indexTitle= new JLabel("index");
         indexTitle.setBorder(border);
         indexPane.add(indexTitle);

       .....
       mainPane.add(titlePane);
  mainPane.add(contentPane);
  JScrollPane mainn= new JScrollPane(mainPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  return mainn;
 }

JPanel выглядит следующим образом:

public JPanel createSortPanel()
   {
      JPanel sortPanel = new JPanel();
      sortPanel.setLayout(new BoxLayout(sortPanel, BoxLayout.X_AXIS));

      dayUntil= new JButton("Sort by Due Date");
      index= new JButton("Sort by index");
      name= new JButton("Sort by name");
      sortPanel.add(dayUntil);
      sortPanel.add(index);
      sortPanel.add(name);
      return sortPanel;
   }

Если кто-то может помочь, это будет очень признательно.


Ответы:


1

Макет JFame по умолчанию — это BorderLayout, который поддерживает это требование:

Основная логика такова:

frame.add(scrollPane, BorderLayout.CENTER)
frame.add(anotherPanel, BorderLayout.PAGE_END);

Прочтите раздел руководства Swing по Диспетчеру компоновки, где приведены рабочие примеры. чтобы лучше понять, как работает BorderLayout.

04.08.2016
  • Будет ли это работать, если я переключу раскладку по умолчанию на такую, как раскладка коробки? 04.08.2016
  • @ J.Shupperd, вы можете делать все, что хотите, но для описываемого вами требования я настоятельно рекомендую нет необходимости менять макет панели содержимого макета фрейма по сравнению с BorderLayout по умолчанию. BorderLayout лучше справится с изменением размера фрейма, чем BoxLayout. Вы можете использовать различные менеджеры компоновки на своих дочерних панелях. Прочтите руководство, загрузите примеры и поиграйте с ними, чтобы понять, как работает каждый макет. 04.08.2016
  • @J.Shupperd, чтобы немного расширить ответ camickr: в BorderLayout центральная «панель» растягивается по мере растяжения JFrame в обоих направлениях. Панель page_end растягивается только по горизонтали. Обычно это то, что нужно, и соответствует тому, что вы описываете. Игра с различными менеджерами компоновки — хорошая идея. 04.08.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..