Как установить два JScrollPanes в разных классах с одинаковым содержимым JPanel - PullRequest
0 голосов
/ 07 мая 2019

Я работаю над графическим интерфейсом, в котором необходимо добавить датчики к двум JScrollPanes в двух разных классах. Существует класс UIManager, который отправляет ArrayList датчиков, в настоящее время подключенных к классу пользовательского интерфейса, который затем устанавливает эти датчики внутри JPanel, который затем устанавливается в качестве окна просмотра для двух JScrollPanes:

Из класса UIManager

private static void updateSensorsConnectedSmallEntries() {
    UserInterface.setSensorEntriesSmall(sensorEntriesSmall);
}

Внутри класса UserInterface

    public static void setSensorEntriesSmall(ArrayList<SensorEntrySmall> sesList) {
        setSensorEntriesSmall(tabDataLogging.getConnectedSensorsScrollList(), sesList);
        setSensorEntriesSmall(tabLiveChart.getConnectedSensorsScrollList(), sesList);
    }

    private static void setSensorEntriesSmall(JScrollPane pane, ArrayList<SensorEntrySmall> sesList) {
        javax.swing.JPanel scrollList = new javax.swing.JPanel();
        scrollList.setBackground(Color.WHITE);
        pane.setBackground(Color.WHITE);
        javax.swing.GroupLayout paneLayout = new javax.swing.GroupLayout(scrollList);
        scrollList.setLayout(paneLayout);

        GroupLayout.ParallelGroup hor = paneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING);
        GroupLayout.ParallelGroup ver = paneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING);
        GroupLayout.SequentialGroup horSeq = paneLayout.createSequentialGroup();
        GroupLayout.SequentialGroup verSeq = paneLayout.createSequentialGroup();
        GroupLayout.ParallelGroup horSeqPlaceHolder = paneLayout.createParallelGroup();

        horSeq.addContainerGap();
        verSeq.addContainerGap();
        for (SensorEntrySmall ses : sesList) {
            horSeqPlaceHolder.addComponent(ses.getSensorEntrySmall());
            verSeq.addComponent(ses.getSensorEntrySmall(), javax.swing.GroupLayout.PREFERRED_SIZE, 
                    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE);
            verSeq.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED);
        }
        horSeq.addGroup(horSeqPlaceHolder);
        horSeq.addContainerGap();
        verSeq.addContainerGap();

        hor.addGroup(horSeq);
        paneLayout.setHorizontalGroup(hor);
        ver.addGroup(verSeq);
        paneLayout.setVerticalGroup(ver);

        pane.setViewportView(scrollList);
    }

Похоже, проблема в том, что список назначается различным вкладкам. Если я назначу их сначала на tabDataLogging, а затем на tabLiveChart, датчики отображаются только на tabLiveChart и наоборот.

Я бы хотел, чтобы датчики отображались на обеих вкладках. У кого-нибудь есть предложения о том, что здесь происходит не так?

1 Ответ

0 голосов
/ 07 мая 2019

, где датчики должны быть добавлены к двум JScrollPanes в двух разных классах.

У компонентов Swing может быть только один родительский компонент, поэтому вы не можете открыть общий доступ к панели.

Однако вы можете поделиться данными.Большинство компонентов Swing имеют Model.Модель может быть общей.

Так, например, если ваши датчики отображаются в JTable, вы можете поделиться TableModel.Вам необходимо создать две JTables, но одну и ту же модель можно добавить в каждую таблицу.

...