2014-10-11 87 views
0

我正在构建一个表单,用户可以在其中输入员工信息并将其显示在textarea字段中,但我也有一个显示全部或“看不见”按钮,我无法工作。 \Java与JPanel

我节省保存到一个数组每次提交称为resultshold,然后该数组保存到一个数组称为line但两个数组只持有一个提交而不是多个 - 我测试了它,每一次我显示的内容数组'行'它只显示最后一次提交意味着它不存储多次提交每次单击计算按钮 - 我添加了一个计数器行数组来设置商店“文本”变量的位置,但它只保存一个而不是多少 - 有人可以帮助或引导我在正确的方向 - 下面是我的代码。

public class Container extends JFrame { 
    ArrayList<String> resultsHold = new ArrayList<>(); 
    ArrayList line = new ArrayList<>(); 
    //private String[] resultsHold; 
    private final JLabel EmployeeNamelabel; 
    private final JLabel HoursWorkedLabel; 
    private final JLabel department; 
    private final JLabel emptycell; 
    private final JLabel wageLabel; 
    private final JLabel departmentresultsLabel; 
    private final JTextField EmployeeNameTexfield; 
    private final JTextField HoursWorkedtextfield; 
    private final JTextField wagetextfield; 
    private final JTextArea resultsscreen; 
    public JButton seeAll; 
    public JButton myExitButton; 
    public JButton CalcButton; 
    public JButton ClearButton; 
    JPanel centerPanel; 
    JPanel buttonPanel; 
    JPanel textfieldPanel; 
    JPanel myresultsPanel; 

    public Container() { 
     super("Payroll Program"); 
     String[] departments = {"CHOICE 1", "CHOICE 2", "CHOICE 3", 
       "CHOICE 4", "CHOICE  5", "CHOICE 6"}; 
     final JComboBox<String> departmentsV = new JComboBox<String>(departments); 

     departmentsV.setVisible(true); 

     getContentPane().setLayout(new GridLayout(4, 5, 8, 8)); 

     //creating text fields, labels and buttons 

     emptycell = new JLabel(""); 
     departmentresultsLabel = new JLabel(); 
     EmployeeNamelabel = new JLabel("First Name"); 
     HoursWorkedLabel = new JLabel("Hours Worked"); 
     wageLabel = new JLabel("Wage"); 
     department = new JLabel("Department"); 
     EmployeeNameTexfield = new JTextField(5); 
     HoursWorkedtextfield = new JTextField(5); 
     wagetextfield = new JTextField(5); 
     resultsscreen = new JTextArea(20, 50); 
     myExitButton = new JButton("Exit"); 
     myExitButton.setSize(new Dimension(10, 10)); 
     CalcButton = new JButton("Calc"); 
     CalcButton.setSize(new Dimension(10, 10)); 
     ClearButton = new JButton("Clear"); 
     ClearButton.setSize(new Dimension(10, 10)); 
     seeAll = new JButton("See All Results"); 
     seeAll.setSize(new Dimension(10, 10)); 

     //adding labels 
     centerPanel = new JPanel(); 
     buttonPanel = new JPanel(); 
     textfieldPanel = new JPanel(); 
     myresultsPanel = new JPanel(); 

     centerPanel.setLayout(new GridLayout(0, 4, 8, 8)); 
     centerPanel.add(EmployeeNamelabel); 
     centerPanel.add(HoursWorkedLabel); 
     centerPanel.add(wageLabel); 
     centerPanel.add(department); 

     // adding text fields 
     textfieldPanel.setLayout(new GridLayout(0, 4, 8, 8)); 
     textfieldPanel.add(EmployeeNameTexfield); 
     textfieldPanel.add(HoursWorkedtextfield); 
     textfieldPanel.add(wagetextfield); 
     textfieldPanel.add(departmentsV); 

     //adding the buttons to the panel 
     buttonPanel.setLayout(new GridLayout(0, 4, 8, 8)); 
     buttonPanel.add(seeAll); 
     buttonPanel.add(myExitButton); 
     buttonPanel.add(CalcButton); 
     buttonPanel.add(ClearButton); 
     myresultsPanel.setLayout(new GridLayout(0, 1, 8, 8)); 
     myresultsPanel.add(emptycell); 
     myresultsPanel.add(resultsscreen); 
     myresultsPanel.add(emptycell); 
     myresultsPanel.add(emptycell); 

     getContentPane().add(centerPanel, BorderLayout.NORTH); 
     getContentPane().add(textfieldPanel, BorderLayout.NORTH); 
     getContentPane().add(buttonPanel, BorderLayout.NORTH); 
     getContentPane().add(myresultsPanel, BorderLayout.NORTH); 
     //clear button action event listener 

     ClearButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       EmployeeNameTexfield.setText(""); 
       wagetextfield.setText(""); 
       HoursWorkedtextfield.setText(""); 
       resultsscreen.setText(""); 
      } 
     }); 

     //end clear listener 
     CalcButton.addActionListener(new ActionListener() { 
      private int counter; 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       String mymy[]; 
       counter++; 
       String hoursC; 
       String name; 
       Double total; 
       String wageC; 
       name = EmployeeNameTexfield.getText(); 
       wageC = wagetextfield.getText(); 
       hoursC = HoursWorkedtextfield.getText(); 
       total = Double.parseDouble(hoursC) * Double.parseDouble(wageC); 
       departmentresultsLabel.setText((String) departmentsV.getSelectedItem()); 
       String text = name + "'s" + " weekly pay is: $" + total + "..." + "Department:  " + departmentsV.getSelectedItem(); 
       // resultsscreen.append(
       // name +"'s"+" weekly pay is: $" + total + "..." + "Department:      "+departmentsV.getSelectedItem()); 
       resultsHold = new ArrayList<>(); 
       resultsHold.add(text); 
       //resultsHold.set(counter,text); 
       // line= new ArrayList<>(); 
       line.add(counter, resultsHold); 
       // System.out.println(line.size()); 
       // if(resultsHold.size()>0){ 
       System.out.println(resultsHold.size()); 
       resultsscreen.append(resultsHold.toString()); 
       // } 
       System.out.println(counter); 
       EmployeeNameTexfield.setText(""); 
       wagetextfield.setText(""); 
       HoursWorkedtextfield.setText(""); 
       resultsscreen.setText(""); 
       //resultsHold.add(name); 
       //resultsHold.add(wageC); 
       // resultsHold.add(hoursC); 
       // resultsHold.add(total.toString()); 
       // resultsHold.add((String) departmentsV.getSelectedItem()); 
       //line.set(i, resultsHold.get(i)); 
       // line.add(resultsHold); 
       // System.out.println(line); 
       resultsscreen.append(line.toString()); 
      } 
     }); 
     //event listeners 
     myExitButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       //exit program 
       System.exit(0); 
      } 
     }); 
     seeAll.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < line.size(); i++) { 
        resultsscreen.append(line.get(i).toString()); 
        System.out.println(line.get(i)); 
        //System.out.println(line.size()); 
       } 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     Container guiwindow = new Container(); 
     guiwindow.ShowWindow(); 
    } 

    public void ShowWindow() { 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     this.setBounds(100, 100, 400, 300); 
     this.setVisible(true); 
    } 
} 
+0

@Zhuinden格式是好的,但请不要” t删除其他更改 – msrd0 2014-10-11 11:53:54

+0

@ msrd0这是并行编辑的问题,无法合并 – EpicPandaForce 2014-10-11 11:54:28

+0

您的arraylist称为'line'缺少模板参数,并且您正在使用原始类型 – EpicPandaForce 2014-10-11 12:01:33

回答

1
resultsHold = new ArrayList<>(); 
resultsHold.add(text); 

所以,每次您的按钮被点击的时候,你要重新建立一个新的列表和存储中的文本。你不想创建一个新的列表。你只想添加一些东西到已经存在的列表中。

请注意,你的代码是真正可怕的:公共领域,使用原料类型,代码注释,Java约定不尊重可言,毫无意义的变量名...

+0

这样做的伎俩和抱歉的家伙马虎代码,一旦我开始工作,我会清理它,我为此道歉。 JB非常感谢兄弟!你的指示让这个计划奏效 - 我无法相信我是如此愚蠢的想念那个。 – brian 2014-10-11 12:31:26

+1

回复:您的评论 - 根据我的经验,编写代码“稍后清理”通常是一个糟糕的主意。在你工作之后,有几个强大的力量会对你进行“稍后清理” - 这些改变很容易破坏事物;代码组织性差,现在需要重新设计,而不仅仅是清洁;如果你需要帮助,那么写得不好的代码会让其他人更难以帮助你,而且更难以找到自己的问题。一旦考虑到重写,测试,问题等因素,第一个好的代码会更快写入。 – arcy 2014-10-11 13:20:01