2015-12-04 2 views
0

Мне нужна помощь с моим кодом программы java. В основном это программа, которая позволяет пользователям запрашивать элемент и сумму, которую они хотят. Если есть на складе, они могут нажать кнопку «купить». После нажатия появится диалоговое окно подтверждения, спрашивающее, хочет ли пользователь покупать единицы «x» для суммы «y». Они могут выбрать «да», «нет» или «отменить». Если они выберут «да», появится всплывающая рамка с reciept (еще не была сделана эта часть). Проблема, с которой я сталкиваюсь, заключается в том, что если они не нажимают кнопку «Нет» или отменят рамку reciept, она показывается - я не хочу, чтобы это делалось. Пожалуйста, скажите мне, что не так с моим кодом, поскольку он не выполняет, как я хочу, чтобы он выполнял. постскриптум им новичок в Java, как ив только учусь в течение месяцаJava Button для программы

enter code here 

public PurchaseItem() { 

    this.setLayout(new BorderLayout()); 

    JPanel top = new JPanel(); 
    top.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    JPanel bottom = new JPanel(); 
    bottom.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    bottom.add(Buy); 
    this.add(bottom, BorderLayout.SOUTH); 

    setBounds(100, 100, 450, 250); 
    setTitle("Purchase Item"); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

    top.add(new JLabel("Enter Item Key:")); 
    top.add(ItemNo); 
    top.add(new JLabel ("Enter Amount:")); 
    top.add(AmountNo); 
    top.add(check); 

    Buy.setText("Buy"); Buy.setVisible(true); 

    check.addActionListener(this); 
    Buy.addActionListener(this); 

    add("North", top); 
    JPanel middle = new JPanel(); 
    middle.add(information); 
    add("Center", middle); 

    setResizable(true); 
    setVisible(true); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    String ItemKey = ItemNo.getText();   
    String ItemAmount = AmountNo.getText(); 
    String Name = StockData.getName(ItemKey); 

    int Yes = JOptionPane.YES_OPTION; 
    int No = JOptionPane.NO_OPTION;  

    int Amount = Integer.parseInt(ItemAmount); 
    int Key = Integer.parseInt(ItemKey); 

    int NewStock = StockData.getQuantity(ItemKey) - Amount; 

    double Total = Integer.parseInt(ItemAmount) * StockData.getPrice(ItemKey); 

    if (Name == null){ 
     information.setText("There is no such item"); 
    } 
    else if (Amount > StockData.getQuantity(ItemKey)) { 
    information.setText("Sorry there is not enough stock available"); 
} 
    else { 
     information.setText(Name + " selected: " + ItemAmount); 
     information.append("\nIndividual Unit Price: " + pounds.format(StockData.getPrice(ItemKey))); 
     information.append("\nCurrent Stock Available: " + StockData.getQuantity(ItemKey)); 
     information.append("\nNew Stock After Sale: " + NewStock); 
     information.append("\n\nTotal: " + ItemAmount + " Units" + " at " + pounds.format(StockData.getPrice(ItemKey)) + " each"); 
     information.append("\n= " + pounds.format(Total)); 
    }   
    if (e.getSource() == Buy) {   
     JOptionPane.showConfirmDialog(null, "Buy " + ItemAmount + " Units" + " for " + pounds.format(Total) + "?"); 
     if (Yes == JOptionPane.YES_OPTION) { 
     JFrame frame2 = new JFrame(); 
     frame2.pack(); frame2.setBounds(250, 250, 500, 500); frame2.setTitle("Reciept"); frame2.setVisible(true); 
     JPanel middle = new JPanel(); 
     middle.setLayout(new FlowLayout(FlowLayout.CENTER)); 
     middle.add(reciept); 
     reciept.setBounds(260,260,400,400); 
     reciept.setVisible(true); 
     } 


    } 
} 

}

ответ

3

if (Yes == JOptionPane.YES_OPTION) { всегда true (Yes был равен JOptionPane.YES_OPTION; int Yes = JOptionPane.YES_OPTION;).

Вам нужно получить возвращаемое значение из JOptionPane.showConfirmDialog и сравнить, что

int response = JOptionPane.showConfirmDialog(null, "Buy " + ItemAmount + " Units" + " for " + pounds.format(Total) + "?"); 
if (response == JOptionPane.YES_OPTION) { 
    ... 
} 
+0

Не уверен, что вы имеете в виду там –

+0

В самом деле? В основном вы говорите 'if (1 == 1)', который всегда является «истинным», независимо от того, что пользователь может ответить. 'JOptionPane.showConfirmDialog' возвращает« действие », которое использует выбор, поэтому вам нужно сравнить ответ с интересующим вас действием. См. [Как сделать диалоги] (http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html) для получения дополнительной информации. – MadProgrammer

+0

Спасибо, я понял, как это сделать, и теперь он отлично работает. :) –

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