如何通过.text文件添加多个组件

时间:2014-07-09 01:52:13

标签: java swing file-io

我正在尝试创建一个程序,该程序将创建从 .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();
    }
} 

1 个答案:

答案 0 :(得分:0)

因为在这一行:while(fw.readLine()!=null);你读取了价值而你什么也没做,所以它就丢失了。

如果添加3个按钮,可能会出现第三个按钮,因为第二个按钮将丢失,第三个将被加载到String property=fw.readLine();