我创建了下面的代码,以便我可以动态地将面板垂直地一个接一个地添加到滚动窗格中。
每个面板都应该有一些绘制的东西(基于从文件加载的数据点的图形,虽然为了简单起见,我改变了代码使其看起来像是一个字符串)。
public void btnShow(Main aThis, ActionEvent evt) {
String cont = drv.load(fln.filePoints, true);//load file content
String d[] = cont.split(utf.splt[1]);//split using special symbol
for (int i = 1; i <= d.length - 1; i++) {
String fn = d[i] + pth.endPoints;//data split is a filename
String s = drv.load(fn, true);//load file content
// Paint string onto panel
class MyPanel extends JPanel {
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
}
DriveRouter drv = new DriveRouter();
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString(s, x, y);
}
}
//
JPanel pan = new MyPanel();
//Add panel to scrollpane
aThis.jScrollPane1.add(pan);
}
}
问题是,没有任何东西出现。
我应该如何将这些面板一个接一个地垂直添加到我的容器中(我为这种情况选择了一个jScrollPane)。
理想情况下,最终产品应该看起来像一个可滚动的文本列表(因为每个面板上都有一个字符串)。当然,使用我的实际代码,这将是一个可滚动的绘制图表列表,每个图形都是一个单独的JPanel。
请帮忙!
注意:我尝试用jTabbedPane替换scrollpane,并且第一次被绘制,并且为每个窗格创建了标签。不幸的是,无论出于何种原因,当我切换标签时都没有出现。
答案 0 :(得分:3)
你不应该把东西添加到JScrollPane本身而是添加到它的视口 - 检查JScrollPane tutorial这将解释为什么会这样。
此外,如果您要动态添加内容,则需要在添加或删除容器后调用revalidate()
和repaint()
,以便添加的组件布局并重新绘制。
此外,如果您要向JScrollPane添加多个JPanel,那么您应首先将“master”JPanel添加到视口,为其提供一个不错的布局管理器,然后将新的JPanel动态添加到此JPanel,再次重新验证和重绘。
如果您需要更全面的答案,请创建并发布您的MCVE。