gpt4 book ai didi

java - 在具有固定大小的 JPanel 中显示未知数量的 JButton

转载 作者:行者123 更新时间:2023-11-30 05:34:51 24 4
gpt4 key购买 nike

所以我正在做一个小型的 Uno 游戏,Swing 似乎很喜欢踢我的屁股。我遇到的问题是当玩家看到并选择要放下哪张牌时。我有一个给定的具有固定大小的面板和动态数量的卡片(带 ImageIcons 的 JButtons)。我目前正在使用 FlowLayout 来让这些卡片很好地显示,但如果卡片太多,它们就会开始在底部消失。

我想编写的优雅解决方案包括将所有卡片放在一行中,并根据数量计算卡片之间的距离,以便它们均匀地分布在面板中。如果有很多卡片,它们就会重叠,这可以通过 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();

}
}

提前致谢。

最佳答案

JScrollPane scroll = new JScrollPane(panel);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.add(panel);
panel2.add(panel, BorderLayout.WEST);

这不是使用 JScrollPane 的方式。 4 行代码每行的注释:

  1. 第一行是正确的。这将创建一个 JScrollPane 并将面板添加到滚动 Pane 的视口(viewport)中。

  2. 您不需要设置滚动条策略。如果需要,滚动条将自动出现。

  3. 不要将组件直接添加到滚动 Pane 。需要将组件添加到滚动 Pane 的 JViewport(这已在第一行代码中为您完成)

  4. 不要将“面板”添加到另一个面板。 Swing 组件只能有一个父组件。该语句将从滚动 Pane 中删除“面板”

相反,您需要将滚动 Pane 添加到父面板:

panel2.add(scroll, BorderLayout.WEST);

关于java - 在具有固定大小的 JPanel 中显示未知数量的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56861484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com