gpt4 book ai didi

java - 在 for 循环中添加 JButton

转载 作者:行者123 更新时间:2023-12-02 08:49:07 25 4
gpt4 key购买 nike

JAVA Swing问题

我想基于字符串列表创建 JButton 列表,该字符串表示按钮文本。在第一步中,我从外部文本文件收集按钮文本的数据。该数据存储在数据变量中。

List<String> data = ReadFile("texts.txt")

现在我想创建 JButton 列表,命名为“buttons”。我在那里设置了它们的文本和边界。边界是相对于索引的,因此按钮放置在彼此的下方。最后,我将按钮添加到框架和按钮列表中。

List<JButton> buttons = new ArrayList<>();
for (int index = 0; index < data.size(); index++) {
JButton button = new JButton();
button.setText(data.get(index));
button.setBounds(0, index*50, 100, 50);
add(button);
buttons.add(button);

但是当我执行此操作时,最后一个按钮会变大,当我将鼠标悬停在它们上方时,第一个按钮也会消失,但这是基于最后一个按钮放置在上面的事实:

Picture of the executed script

最后一个按钮具有框架的大小,没关系,如果我调整框架的大小:

Picture of the resized screen

我希望有人可以帮助我或告诉我在哪里可以找到帮助。谢谢。

最佳答案

the last Button ends big, the first ones also disappear when I don't hover over them,

这是因为默认情况下 JFrame 的内容 Pane 使用 BorderLayout。当您将组件添加到 BorderLayout 时,按钮将添加到 CENTER。但是,只能将单个组件添加到 CENTER,因此只有最后添加的组件的大小/位置由 BorderLayout 管理。

不要尝试手动设置组件的大小/位置。布局管理器的工作就是执行此操作。在您的情况下,您可以使用几个具有不同布局的面板,因此将按钮对齐左侧的列中。像这样的东西:

JPanel buttonPanel = new JPanel( new GridLayout(0, 1) );

for (int index = 0; index < data.size(); index++) {
JButton button = new JButton();
button.setText(data.get(index));
button.setBounds(0, index*50, 100, 50);
//add(button);
buttonPanel.add( button );
buttons.add(button);
}

add(buttonPanel, BorderLayout.LINE_START);

尝试上面的代码,你会发现按钮的尺寸都是相同的,但是尺寸随着框架高度的变化而不断变化。

因此,为了防止这种大小调整,我们需要使用额外的布局管理器允许按钮以首选高度显示:

//add(buttonPanel, BorderLayout.LINE_START);
JPanel wrapper = new JPanel( new BorderLayout() );
wrapper.add(buttonPanel, BorderLayout.PAGE_START);
add(wrapper, BorderLayout.LINE_START);

阅读 Layout Manager 上的 Swing 教程了解更多信息和示例。

关于java - 在 for 循环中添加 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60899719/

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