java - 在循环中创建 JButton 会导致仅出现最后一个

标签 java loops jframe jbutton

我正在尝试使用扫描仪读取文件并为文件中的每个新行创建一个 JButton。创建按钮后,我将其添加到框架中。但是,一旦我运行该程序,只会出现最近的按钮。我不确定为什么在循环中创建按钮会导致这种情况发生。如果有人能解释为什么会发生这种情况,将不胜感激,谢谢!

import java.awt.FlowLayout;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;

public class PointOfSale extends JFrame {

    ArrayList<JButton> menuButtons = new ArrayList<>();

    public PointOfSale(File menu) throws IOException{
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        Scanner sc = new Scanner(menu);
        while (sc.hasNextLine()){
            String name = sc.nextLine();
            JButton menuButton = new JButton(name);
            frame.add(menuButton);
            menuButtons.add(menuButton);
        }
        sc.close();
        frame.pack();
        frame.setVisible(true);
    }
}

最佳答案

您的代码不尊重布局管理器,因为 JFrame 使用仅显示一个按钮的 BorderLayout。阅读布局管理器教程,使用不同的教程,这里可能是 GridLayout,您的问题可能会得到解决。

关于java - 在循环中创建 JButton 会导致仅出现最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551881/

相关文章:

java - 从 JFrame 录制视频

java - 在我最小化并再次打开窗口之前,JButtons 不会显示

java - 在同一集合上嵌套 for 循环,从该集合中删除元素

java - C++ 游戏库/引擎,如 Java 中的 LWJGL

java - 尽管返回相反的结果,但表未在更新时更新

vba - Excel VBA : Loop through cells and copy values to another workbook

javascript - 我想循环遍历数组并修改属性

excel - 将每个单元格的名称设置为其内容/值

java - extra\in json 响应之前/在 java、android 中

java - 如何重绘多个 JFrame