我正在尝试创建一个程序,该程序将创建从 .txt 文件中读取的多个JComponent
。
例如,如果 .txt 文件包含以下内容:
"[JButton]
OK~150~250~100~50
Cancel~250~250~100~50"
应该创建两个JButton。一个带有文字" OK"在位置x(150),y(250)和大小100 50和另一个与文本"取消"在位置x(250),y(250)和大小100 50。
我的问题是它只创建一个按钮。如何添加其他按钮?
我尝试在do while
部分进行if(s.equals="[JButton]")
循环。这是我的代码:
private void btnThreeActionPerformed(java.awt.event.ActionEvent evt) {
String filename="ButtonThreeComponent.txt";
JFrame frame=new JFrame();
JPanel panel=new JPanel();
try (BufferedReader fw = new BufferedReader(new FileReader(new File(filename))))
{
String s = null;
while((s = fw.readLine()) != null)
{
if(s.equals("[JFrame]"))
{
String property=fw.readLine();
String infos[]=property.split("~");
frame=new JFrame(infos[0]);
frame.setLocation(Integer.parseInt(infos[1]), Integer.parseInt(infos[2]));
frame.setSize(Integer.parseInt(infos[3]),Integer.parseInt(infos[4]));
frame.setVisible(true);
panel=new JPanel();
panel.setLayout(null);
frame.add(panel);
}
if(s.equals("[JTextField]"))
{
String property=fw.readLine();
String infos[]=property.split("~");
JTextField textfield=new JTextField(infos[0]);
textfield.setSize(Integer.parseInt(infos[3]),Integer.parseInt(infos[4]));
textfield.setLocation(Integer.parseInt(infos[1]), Integer.parseInt(infos[2]));
panel.add(textfield);
}
if(s.equals("[JButton]"))
{
while((property=fw.readLine())!=null)
{
String[] infos=property.split("~");
JButton button=new JButton(infos[0]);
button.setSize(Integer.parseInt(infos[3]),Integer.parseInt(infos[4]));
button.setLocation(Integer.parseInt(infos[1]), Integer.parseInt(infos[2]));
panel.add(button);
}
}
if(s.equals("[JLabel]"))
{
String property=fw.readLine();
String infos[]=property.split("~");
JLabel label=new JLabel(infos[0]);
label.setSize(Integer.parseInt(infos[3]),Integer.parseInt(infos[4]));
label.setLocation(Integer.parseInt(infos[1]), Integer.parseInt(infos[2]));
panel.add(label);
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
答案 0 :(得分:0)
因为在这一行:while(fw.readLine()!=null);
你读取了价值而你什么也没做,所以它就丢失了。
如果添加3个按钮,可能会出现第三个按钮,因为第二个按钮将丢失,第三个将被加载到String property=fw.readLine();