2014-10-11 94 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