Итак, я играю в маленькую игру Uno, и Swing, похоже, пинает меня в зад. Проблема, которую я получаю, состоит в том, когда игрок видит и выбирает, какую из своих карт отложить. У меня есть заданная панель с фиксированным размером и динамическое количество карт (JButtons с ImageIcons). В настоящее время я использую FlowLayout, чтобы эти карты выглядели красиво, но если их слишком много, они начинают исчезать внизу.
Изящное решение, которое я хотел написать, состоит в том, чтобы иметь одну строку со всеми картами и просто рассчитать расстояние между картами в зависимости от количества, чтобы они равномерно распределялись в Panel. Если есть много карт, они будут перекрываться, и это может быть решено чисто с помощью JLayeredPane. Я не очень далеко продвинулся, но если у вас есть решение для этого, я был бы очень признателен.
Теперь второй и более важный вопрос, вероятно, заключается в том, что я не понимаю, что совершил какую-то глупую ошибку. В этот момент я был бы счастлив, если бы карты исчезли внизу и просто имели полосу прокрутки, чтобы перейти вниз и выбрать их, но, похоже, это тоже не работает.
SSCCE:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollPaneTest {
public static void main(String[] args) {
new ScrollPaneTest().init();
}
public void init() {
JFrame frame = new JFrame();
JPanel panel2 = new JPanel();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 100));
panel.setBackground(Color.GREEN);
panel.setLayout(new FlowLayout());
for (int i = 0; i < 15; i++) {
panel.add(new JButton("Hi :)"));
}
JScrollPane scroll = new JScrollPane(panel);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.add(panel);
panel2.add(panel, BorderLayout.WEST);
frame.getContentPane().add(panel2, BorderLayout.NORTH);
frame.setVisible(true);
frame.pack();
}
}
Заранее спасибо.