2013-04-15 4 views
2

Итак, я делаю простую небольшую программу, которая будет рассчитать цену на пиццу при заказе. Пицца может быть маленькой, средней или большой, и может поставляться с 2-мя начинками за дополнительную плату (пепперони 1,25 доллара и грибы 1,10 доллара США). Я создал свою общую переменную и поместил затраты в программу, чтобы ее вычислить, но я получаю пустое от своей программы, где ожидал, что это будет общая сумма. Есть идеи?Почему моя строка цены не отображается в приложении

enter image description here

import java.awt.BorderLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.border.EtchedBorder; 
import javax.swing.border.TitledBorder; 


public class Test extends JFrame 
{ 
    double total = 0; 
    String totalPrint="$" + Double.toString(total); 

    public Test() 
    { 



     sampleField = new JLabel(totalPrint); 
     add(sampleField, BorderLayout.CENTER); 


     class ChoiceListener implements ActionListener 
     { 
     public void actionPerformed(ActionEvent event) 
     { 
      setSampleFont(); 
     } 
     } 

     listener = new ChoiceListener(); 

     createControlPanel(); 
     setSampleFont(); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    } 


    public void createControlPanel() 
    { 
     JPanel sizeGroupPanel = createCheckBoxes(); 
     JPanel styleGroupPanel = createRadioButtons(); 

     JPanel controlPanel = new JPanel(); 
     controlPanel.setLayout(new GridLayout(2, 1)); 

     controlPanel.add(sizeGroupPanel); 
     controlPanel.add(styleGroupPanel); 

     add(controlPanel, BorderLayout.SOUTH); 
    } 

    public JPanel createCheckBoxes() 
    { 
     pCheckBox = new JCheckBox("Pepperoni"); 
     pCheckBox.addActionListener(listener); 

     mCheckBox = new JCheckBox("Mushrooms"); 
     mCheckBox.addActionListener(listener); 

     JPanel panel = new JPanel(); 
     panel.add(pCheckBox); 
     panel.add(mCheckBox); 
     panel.setBorder 
     (new TitledBorder(new EtchedBorder(), "Toppings")); 

     return panel; 
    } 

    public JPanel createRadioButtons() 
    { 
     smallButton = new JRadioButton("Small"); 
     smallButton.addActionListener(listener); 

     mediumButton = new JRadioButton("Medium"); 
     mediumButton.addActionListener(listener); 

     largeButton = new JRadioButton("Large"); 
     largeButton.addActionListener(listener); 
     largeButton.setSelected(true); 

     ButtonGroup group = new ButtonGroup(); 
     group.add(smallButton); 
     group.add(mediumButton); 
     group.add(largeButton); 

     JPanel panel = new JPanel(); 
     panel.add(smallButton); 
     panel.add(mediumButton); 
     panel.add(largeButton); 
     panel.setBorder 
      (new TitledBorder(new EtchedBorder(), "Size")); 

     return panel; 
    } 

    public void setSampleFont() 
    { 

     if (pCheckBox.isSelected()) 
     total = total + 1.25; 
     if (mCheckBox.isSelected()) 
     total = total + 1.10; 

     double size = 0; 
     double style = 0; 

     final double SMALL_SIZE = 5.25; 
     final double MEDIUM_SIZE = 7.55; 
     final double LARGE_SIZE = 9.35; 

     if (smallButton.isSelected()) 
     total = total + SMALL_SIZE; 
     else if (mediumButton.isSelected()) 
      total = total + MEDIUM_SIZE; 
     else if (largeButton.isSelected()) 
      total = total + LARGE_SIZE; 

    sampleField.setFont(new Font(totalPrint, (int) style, (int) size));  
     sampleField.repaint(); 
    } 

    private JLabel sampleField; 
    private JCheckBox pCheckBox; 
    private JCheckBox mCheckBox; 
    private JRadioButton smallButton; 
    private JRadioButton mediumButton; 
    private JRadioButton largeButton; 
    private ActionListener listener; 

    private static final int FRAME_WIDTH = 300; 
    private static final int FRAME_HEIGHT = 400; 
} 
+0

Вы можете вставить более крупный скриншот программы и только часть кода, которую вы подсчитаете фактической ценой? –

+0

См. [Как создать скриншоты?] (Http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post) (советы по созданию * great * screenshots). (Совет - обведите границу белого пробела). –

ответ

2

Там нет шрифта по имени "$" + Double.toString(total) ... где-нибудь на планете ...

new Font(totalPrint, (int) style, (int) size) 

Первый параметр должен быть имя шрифта, который вы хотите использовать, не текст!

В то время как при его фиксации размер шрифта 0 будет производить пустой результат одновременно.

Обновлены например

enter image description here

public void setSampleFont() { 

    if (pCheckBox.isSelected()) { 
     total = total + 1.25; 
    } 
    if (mCheckBox.isSelected()) { 
     total = total + 1.10; 
    } 

    // !! Supply a positive font size // 
    double size = 64; 
    // A nice style // 
    double style = Font.BOLD; 

    final double SMALL_SIZE = 5.25; 
    final double MEDIUM_SIZE = 7.55; 
    final double LARGE_SIZE = 9.35; 

    if (smallButton.isSelected()) { 
     total = total + SMALL_SIZE; 
    } else if (mediumButton.isSelected()) { 
     total = total + MEDIUM_SIZE; 
    } else if (largeButton.isSelected()) { 
     total = total + LARGE_SIZE; 
    } 

    // Use the JLabel's default font... 
    Font font = UIManager.getFont("Label.font"); 
    // Derive a new font at the required size and style... 
    font = font.deriveFont((int)style, (int)size); 

    sampleField.setText(totalPrint); 
    sampleField.setFont(font); 
//  sampleField.repaint(); 
} 

На стороне записки. Вам не нужно делать это КАЖДОЕ время, когда вы хотите обновить цену. Установите шрифт на один раз в конструкторе ...

+0

Wow thats great! Мне очень нравятся большие смелые цифры. Но теперь они всего лишь $ 0,0. Я ошибаюсь в своей математике? –

+0

Я думаю, вы считаете, что 'totalPrint' будет автоматически обновляться при изменении' total', но это не будет. Вам нужно также обновить 'totalPrint'. Фактически, я бы просто использовал 'sampleField.setText (NumberFormat.getCurrencyInstance(). Format (total)); вместо – MadProgrammer

2

Наряду с именем шрифта является недействительным, размер шрифта должен быть больше нуля, чтобы увидеть:

double size = 0; // hello? 
+0

+1 для определения размера секунд до того, как я это сделал! – MadProgrammer

1

Вы должны использовать NumberFormat's getCurrencyInstance method, как и в следующий код:

Double currencyAmount = new Double(9876543.21); 
    Currency currentCurrency = Currency.getInstance(currentLocale); 
    NumberFormat currencyFormatter = 
     NumberFormat.getCurrencyInstance(currentLocale); 

    System.out.println(
     currentLocale.getDisplayName() + ", " + 
     currentCurrency.getDisplayName() + ": " + 
     currencyFormatter.format(currencyAmount)); 
+0

Хотя это действительно хороший совет, это не решит проблему OP;) – MadProgrammer

Смежные вопросы