2012-03-13 2 views
0

그래서 사용자가 아침, 점심 및 저녁 식사로 주문한 식사 중 몇 개를 입력해야하는지 프로그램을 만들어야합니다. 그렇다면 각 식사마다 주문한 금액과 각 세금의 총 비용 등을 표시해야합니다. 그래서 결과를 표시하기 위해 JFrame에서 눈금을 만들었지 만 일부 Jlabels에서 오류가 계속 나타납니다. 8, 9, 10, 13, 14, 15, 18, 19, 35, 40, 45. 결과를 표시하기 위해 JLabel 외에 사용할 수있는 것이 있습니까? 감사합니다JLabels 및 Jframe에 문제가 있습니다

import java.awt.*; 
import java.util.*; 
import javax.swing.JOptionPane; 
import javax.swing.*; 

public class MealCost extends JFrame 
{ 

// Constants 

    static Scanner console = new Scanner (System.in); 

    static final double Sales_Tax = .10; 
    static final double Breakfast = 5.50; 
    static final double DiscountB = .10; 
    static final double Lunch = 9.50; 
    static final double DiscountL = .15; 
    static final double Dinner = 16.50; 
    static final double DiscountD = .08; 

    public static void main(String[] args) 
    { 


// Variables and their known values 

    int breakfast = 0; 
    int lunch = 0; 
    int dinner = 0; 

    double tax = 0; 
    double BreakfastCost = 0; 
    double Breakfast_D = 0; 
    double LunchCost = 0; 
    double Lunch_D = 0; 
    double DinnerCost = 0; 
    double Dinner_D = 0; 
    double total_b = 0; 
    double total_l = 0; 
    double total_d = 0; 
    double total = 0; 
    double total_due = 0; 

    char Input; 
    String InputStr; 
    String outputMsg; 


    // This program will display the total cost and discount for each meal of the day. 

    // Output Message 
    outputMsg = "This program will prompt you for the total number of meals ordered for each meal time. \n" 
       + "Breakfast cost $5.50 per meal, but if 10 or more are ordered there is a 10% discount. \n" 
       + "Lunch cost $9.50 per meal, but if 15 or more are ordered there is a 15% discount. \n" 
       + "Dinner cost $16.50 per meal, but if 8 or more are ordered there is a 12% discount. \n"; 

    JOptionPane.showMessageDialog(null,outputMsg,"My Favorite Catering Service", 
       JOptionPane.INFORMATION_MESSAGE); 


    // User Input 


     // Ask user if any meals where ordered. 
    InputStr = JOptionPane.showInputDialog ("Were any meals ordered today (Y)es or (N)o : "); 
    while ((InputStr.length() > 1) || (InputStr.length() == 0)) 
    { 
     InputStr = JOptionPane.showInputDialog ("Only enter a single characater (Y) or (N) : "); 
    } 

    Input = InputStr.charAt(0); 

    switch (Input) 
    { 
    case 'Y': 
    case 'y': 

      // Meals for breakfast ordered 
      InputStr = JOptionPane.showInputDialog ("Enter the number of Breakfast ordered : "); 
      breakfast = Integer.parseInt(InputStr); 

      // Meals for lunch ordered 
      InputStr = JOptionPane.showInputDialog ("Enter the number of Lunch ordered : "); 
      lunch = Integer.parseInt(InputStr); 

      // Meals for dinner ordered 
      InputStr = JOptionPane.showInputDialog ("Enter the number of Dinner ordered : "); 
      dinner = Integer.parseInt(InputStr); 

      // Breakfast discount 
      if (breakfast >= 10) 
       Breakfast_D = Breakfast * breakfast * DiscountB; 


      total_b = Breakfast * breakfast - Breakfast_D; 

      // Lunch discount 
      if (lunch >= 15) 
       Lunch_D = Lunch * lunch * DiscountL; 


      total_l = Lunch * lunch - Lunch_D; 

      // Dinner discount 
      if (dinner >= 8) 
       Dinner_D = Dinner * dinner * DiscountD; 


      total_d = Dinner * dinner - Dinner_D; 



      break; 

    case 'N': 
    case 'n': 

     // Output Message 
     outputMsg = "Thank you for placing your order with us."; 
     JOptionPane.showMessageDialog(null,outputMsg ,"My Favorite Catering Service", 
       JOptionPane.INFORMATION_MESSAGE); 

     System.exit(0); 
     break; 
    default: 

      // Calculations 
      tax = (total_b + total_l + total_d) * Sales_Tax; 
      total = total_b + total_l + total_d; 
      total_due = tax + total; 


     // output message 
     outputMsg = Input + " was an invalid response. \n Thank you for ording with us"; 
     JOptionPane.showMessageDialog(null,outputMsg ,"My Favorite Catering Service", 
       JOptionPane.INFORMATION_MESSAGE); 

     System.exit(0); 

    } 

    // Results page 


    JFrame frame = new JFrame("My Favorite Catering Service"); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300,400); 
    frame.setLocationRelativeTo(null); 
    JPanel panel = new JPanel(); 
    panel.setLayout (new GridLayout(9,5,5,10)); 
    JLabel label1 = new JLabel ("Meal"); 
    JLabel label2 = new JLabel ("Quantity"); 
    JLabel label3 = new JLabel ("Cost"); 
    JLabel label4 = new JLabel ("Discount"); 
    JLabel label5 = new JLabel ("Cost After Discount"); 
    JLabel label6 = new JLabel ("Breakfast"); 
    JLabel label7 = new JLabel ("", breakfast); 
    JLabel label8 = new JLabel ("$%.2f", Breakfast * breakfast); 
    JLabel label9 = new JLabel ("$%.2f", Breakfast_D); 
    JLabel label10 = new JLabel ("$%.2f", total_b); 
    JLabel label11 = new JLabel ("Lunch"); 
    JLabel label12 = new JLabel ("", lunch); 
    JLabel label13 = new JLabel ("$%.2f", Lunch * lunch); 
    JLabel label14 = new JLabel ("$%.2f", Lunch_D); 
    JLabel label15 = new JLabel ("$%.2f", total_l); 
    JLabel label16 = new JLabel ("Dinner"); 
    JLabel label17 = new JLabel ("", dinner); 
    JLabel label18 = new JLabel ("$%.2f", Dinner * dinner); 
    JLabel label19 = new JLabel ("$%.2f", total_d); 
    JLabel label20 = new JLabel (""); 
    JLabel label21 = new JLabel (""); 
    JLabel label22 = new JLabel (""); 
    JLabel label23 = new JLabel (""); 
    JLabel label24 = new JLabel (""); 
    JLabel label25 = new JLabel (""); 
    JLabel label26 = new JLabel (""); 
    JLabel label27 = new JLabel (""); 
    JLabel label28 = new JLabel (""); 
    JLabel label29 = new JLabel (""); 
    JLabel label30 = new JLabel (""); 
    JLabel label31 = new JLabel ("Total"); 
    JLabel label32 = new JLabel (""); 
    JLabel label33 = new JLabel (""); 
    JLabel label34 = new JLabel (""); 
    JLabel label35 = new JLabel ("$%.2f", total); 
    JLabel label36 = new JLabel ("Sales Tax"); 
    JLabel label37 = new JLabel (""); 
    JLabel label38 = new JLabel (""); 
    JLabel label39 = new JLabel (""); 
    JLabel label40 = new JLabel ("$%.2f", tax); 
    JLabel label41 = new JLabel ("Total Due"); 
    JLabel label42 = new JLabel (""); 
    JLabel label43 = new JLabel (""); 
    JLabel label44 = new JLabel (""); 
    JLabel label45 = new JLabel ("$%.2f", total_due); 
    panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); 
    panel.add(label1); 
    panel.add(label2); 
    panel.add(label3); 
    panel.add(label4); 
    panel.add(label5); 
    panel.add(label6); 
    panel.add(label7); 
    panel.add(label8); 
    panel.add(label9); 
    panel.add(label10); 
    panel.add(label11); 
    panel.add(label12); 
    panel.add(label13); 
    panel.add(label14); 
    panel.add(label15); 
    panel.add(label16); 
    panel.add(label17); 
    panel.add(label18); 
    panel.add(label19); 
    panel.add(label20); 
    panel.add(label21); 
    panel.add(label22); 
    panel.add(label23); 
    panel.add(label24); 
    panel.add(label25); 
    panel.add(label26); 
    panel.add(label27); 
    panel.add(label28); 
    panel.add(label29); 
    panel.add(label30); 
    panel.add(label31); 
    panel.add(label32); 
    panel.add(label33); 
    panel.add(label34); 
    panel.add(label35); 
    panel.add(label36); 
    panel.add(label37); 
    panel.add(label38); 
    panel.add(label39); 
    panel.add(label40); 
    panel.add(label41); 
    panel.add(label42); 
    panel.add(label43); 
    panel.add(label44); 
    panel.add(label45); 
    frame.add(panel); 

} 
} 
+3

JLabels이 많이 있습니다. :) "결함있는"라벨에 어떤 오류가 있습니까? –

+0

JTable은 데이터를 표시하는 옵션이 될 수 있습니다. – Serhiy

답변

6

사용 JTable보다는 JLabel의 무리, JTable은 지난 row/column의 예를 들어 당신이 SCODE에서 특정 row/column

enter image description hereenter image description here

에 대한 합계를 만들 수 있습니다, 스윙에서 JComponent 가장 복잡

import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.table.*; 

public class TableProcessing extends JFrame implements TableModelListener { 

    private static final long serialVersionUID = 1L; 
    private JTable table; 

    public TableProcessing() { 
     String[] columnNames = {"Item", "Quantity", "Price", "Cost"}; 
     Object[][] data = { 
      {"Bread", new Integer(1), new Double(1.11), new Double(1.11)}, 
      {"Milk", new Integer(1), new Double(2.22), new Double(2.22)}, 
      {"Tea", new Integer(1), new Double(3.33), new Double(3.33)}, 
      {"Cofee", new Integer(1), new Double(4.44), new Double(4.44)} 
     }; 
     DefaultTableModel model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 

      @Override 
      public boolean isCellEditable(int row, int column) { 
       int modelColumn = table.convertColumnIndexToModel(column); 
       return (modelColumn == 3) ? false : true; 
      } 
     }; 
     model.addTableModelListener(this); 
     table = new JTable(model); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.add(scrollPane); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    @Override 
    public void tableChanged(TableModelEvent e) { 
     System.out.println(e.getSource()); 
     if (e.getType() == TableModelEvent.UPDATE) { 
      int row = e.getFirstRow(); 
      int column = e.getColumn(); 
      if (column == 1 || column == 2) { 
       TableModel model = table.getModel(); 
       int quantity = ((Integer) model.getValueAt(row, 1)).intValue(); 
       double price = ((Double) model.getValueAt(row, 2)).doubleValue(); 
       Double value = new Double(quantity * price); 
       model.setValueAt(value, row, 3); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       TableProcessing frame = new TableProcessing(); 
      } 
     }); 
    } 
} 
+0

좋아, 그렇게 해 주셔서 감사합니다. – EvilSquash

+0

+1, 나는이'JTable' 녀석을 좋아해서 다루기 쉽고, 때로는 너무 힘들어 때때로 :-) 그들에게 내 손을 조심스럽게 시도 할 것입니다 :-) –

0

이 JLabel의에는 어떤 대안이 없지만 하나 JLable에서 다음과 같이 하나의 HTML을 가질 수

String html = "Meal<br />Quantity<br /> .... so on" 
JLabel label = new JLabel(html); 

그리고 당신은 하나의 JLabel를 추가 할 수 있습니다.

0

시도해보십시오.

double tmp = (Breakfast * breakfast); 
JLabel label8 = new JLabel (Double.toString(tmp)); 
관련 문제