有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在循环中创建JButtons只会导致最后一个出现

我试图用扫描仪读取一个文件,并为文件中的每一行创建一个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);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    //public class PointOfSale extends JFrame {
    public class PointOfSale {
    

    您的类不需要扩展JFrame,因为您在类中创建了JFrame

    然后您需要使用:

    frame.setLayout(new FlowLayout());
    

    因为这是添加按钮的框架

  2. # 2 楼答案

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