Java 无法使用arraylist向jframe添加多个jpanel(每个jpanel都是一个单独的计时器并发运行),是否只添加初始jpanel?

Java 无法使用arraylist向jframe添加多个jpanel(每个jpanel都是一个单独的计时器并发运行),是否只添加初始jpanel?,java,swing,arraylist,timer,jpanel,Java,Swing,Arraylist,Timer,Jpanel,这是jframe类中名为“Timer1.java”的代码,jpanel类名为“Timer\u UI.java” ArrayList mul_panels=new ArrayList(); public void jButton2ActionPerformed(java.awt.event.ActionEvent evt){ Timer_UI d_Timer=新的Timer_UI(); 多面板。添加(d_定时器); Timer\u UI dis\u Timer=mul\u panels.get(i

这是jframe类中名为“Timer1.java”的代码,jpanel类名为“Timer\u UI.java”

ArrayList mul_panels=new ArrayList();
public void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
Timer_UI d_Timer=新的Timer_UI();
多面板。添加(d_定时器);
Timer\u UI dis\u Timer=mul\u panels.get(i);
i++;
退刀计时器退刀台(颜色:白色);
显示计时器设置边界(34110434178);
添加(disu定时器);
高度=高度+230;
设置尺寸(新尺寸(523,高度));
}
应用程序的执行

执行应用程序。只有一个jpanel对象在再次单击时添加。帧中未添加计时器:

不要使用setBounds()设置组件的大小

Swing设计用于布局管理器

如果要水平添加更多计时器面板,则需要使用适当的布局管理器。可能是
BoxLayout
,或者
GridLayout

首先阅读上Swing教程中的部分,了解更多信息和工作示例

所以基本逻辑可能是这样的:

JPanel topPanel = new JPanel( new BorderLayout());
topPanel.add(label, BorderLayout.PAGE_START);
topPanel.add(button1, BorderLayout.LINE_START);
topPanel.add(button2, BorderLayout.LINE_END);

Box timerPanel = new Box.createVerticalBox();

frame.add(topPanel, BorderLayout.PAGE_START);
frame.add(timerPanel, BorderLayout.CENTER);
Timer_UI dis_timer = mul_panels.get(i);
dis_timer.setMaximumSize( dis_timer.getPreferredSize() );
timerPanel.add( dis_timer );
timerPanel.revalidate();
timerPanel.repaint();
现在,当您想要创建一个新的计时器时,ActionListner代码如下:

JPanel topPanel = new JPanel( new BorderLayout());
topPanel.add(label, BorderLayout.PAGE_START);
topPanel.add(button1, BorderLayout.LINE_START);
topPanel.add(button2, BorderLayout.LINE_END);

Box timerPanel = new Box.createVerticalBox();

frame.add(topPanel, BorderLayout.PAGE_START);
frame.add(timerPanel, BorderLayout.CENTER);
Timer_UI dis_timer = mul_panels.get(i);
dis_timer.setMaximumSize( dis_timer.getPreferredSize() );
timerPanel.add( dis_timer );
timerPanel.revalidate();
timerPanel.repaint();

请考虑让你的标题更具体,怀疑任何人都会通过搜索引擎找到这个问题的答案。请向我们展示你的最佳尝试,这样我们就可以拥有编译、运行和演示问题的代码。请理解,我们不希望看到您的整个程序,特别是当它的长度超过60行时,但您应该将代码压缩为最小的代码位,它仍然可以编译和运行,没有与您的问题无关的额外代码,但仍然可以演示您的问题。此外,您确实理解JFrame(实际上,它的contentPane)默认使用BorderLayout,如果不更改此设置,将只显示最后添加的JPanel(不指定位置),对吗?退出!粗体用于突出显示特定的单词或短语,而不是问题的整个文本。