gpt4 book ai didi

java - 如何在不同的类中设置两个具有相同 JPanel 内容的 JScrollPanes

转载 作者:行者123 更新时间:2023-12-02 05:54:59 25 4
gpt4 key购买 nike

我正在开发一个 GUI,其中需要将传感器添加到两个不同类中的两个 JScrollPanes 中。有一个 UIManager 类,它发送当前连接到 UI 类的传感器的 ArrayList,然后将这些传感器设置在 JPanel 中,然后将其设置为 View 的视口(viewport)。两个 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 中,反之亦然。

我希望传感器显示在两个选项卡中。有人对这里出了什么问题有什么建议吗?

最佳答案

where sensors need to be added to two JScrollPanes in two different classes.

Swing 组件只能有一个父组件,因此您无法共享面板。

但是,您可以共享数据。大多数 Swing 组件都有一个 Model。该模型可以共享。

例如,如果您的传感器显示在 JTable 中,您可以共享 TableModel。您需要创建两个 JTable,但可以将相同的模型添加到每个表中。

关于java - 如何在不同的类中设置两个具有相同 JPanel 内容的 JScrollPanes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56019702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com