【发布时间】:2019-09-24 22:41:28
【问题描述】:
我正在开发一个 GUI,其中需要将传感器添加到两个不同类中的两个 JScrollPanes。有一个 UIManager 类发送当前连接到 UI 类的传感器的 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 中,反之亦然。
我希望传感器显示在两个选项卡中。有人对这里出了什么问题有任何建议吗?
【问题讨论】:
-
你不能这样做,因为 Swing 有组件树但没有图表。所以当你将一个组件添加到容器中时,它会从之前的容器中移除。
-
"在不同的类中设置两个 JScrollPanes 具有相同的 JPanel 内容" .. 为什么?
-
@AndrewThompson 我想这样做是为了能够从不同的选项卡中选择传感器
-
@SergiyMedvynskyy 例如,我们无法克隆此列表?
-
如果元素对两者都是通用的,请将其放在 外部 选项卡式窗格中。
标签: java swing jpanel jscrollpane