【发布时间】:2016-04-05 17:56:41
【问题描述】:
我正在尝试使用扫描仪读取文件并为文件中的每个新行创建一个 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,为什么还要扩展它?您实际上是在给每个人打电话
frame.add(menuButton, BorderLayout.CENTER);。您需要将setLayout(new FlowLayout());更改为frame.setLayout(new FlowLayout()); -
他们正在被覆盖。问题已结束。
-
我不认为这是正确的副本,因为他将布局设置为 FlowLayout,只是在错误的对象上。