不要设置位置 . 从容器中删除所有按钮并按新顺序重新添加,然后调用 revalidate() 和 repaint() .
Edit
如果要将按钮滑动滑动,请考虑将它们放在JScrollPane中,没有滚动条,然后以编程方式滚动按钮 . 我同意你不应该在EDT上使用 Thread.sleep(...) 而是使用Swing Timer .
Edit 2
例如:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SlideButtons extends JPanel {
private static final int PREF_W = 600;
private static final int PREF_H = 200;
private static final int MAX_BUTTONS = 100;
private static final int SCROLL_TIMER_DELAY = 10;
public static final int SCROLL_DELTA = 3;
private JPanel btnPanel = new J