2013-12-02 5 views
0

Это мой Sales.javaКак ограничить пользователя только номером ввода в текстовое поле?

package assignment2; 

import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JLabel; 
import javax.swing.JComboBox; 
import javax.swing.JRadioButton; 
import javax.swing.ButtonGroup; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 

public class Sales implements ActionListener{ 

private String paymentmethod[] = {"Visa","Master"}; 

private String first = "Crunchy Combo 1 - RM19.70"; 
private String second = "Crunchy Combo 2 - RM26.90"; 
private String third = "Hot Variety Box - RM28.28"; 
private String fourth = "Hot Power Meal 1 - RM22.90"; 
private String fifth = "Hot Power Meal 2 - RM53.90"; 

private double price1 = 19.70; 
private double price2 = 26.90; 
private double price3 = 28.28; 
private double price4 = 22.90; 
private double price5 = 53.90; 
private double total = 0.0; 

private JRadioButton crunchy1 = new JRadioButton("Crunchy Combo 1 - RM 19.70",true); 
private JRadioButton crunchy2 = new JRadioButton("Crunchy Combo 2 - RM 26.90"); 
private JRadioButton hotvariety = new JRadioButton("Hot Variety Box - RM 28.28"); 
private JRadioButton hotpower1 = new JRadioButton("Hot Power Meal 1 - RM 22.90"); 
private JRadioButton hotpower2 = new JRadioButton("Hot Power Meal 2 - RM 53.90"); 
private ButtonGroup gp = new ButtonGroup(); 

private JLabel item = new JLabel("Select Item");  
private JLabel quantity = new JLabel("Quantity: "); 
private JLabel payment = new JLabel("Payment Method: "); 
private JLabel creditCard = new JLabel("Credit Card number: "); 
/*item.setHorizontalAlignment(JLabel.LEFT); 
quantity.setHorizontalAlignment(JLabel.LEFT); 
payment.setHorizontalAlignment(JLabel.LEFT); 
creditcard.setHorizontalAlignment(JLabel.LEFT);*/ 

private JTextField quantitytext = new JTextField("1",10); 
private JTextField creditCardtext = new JTextField("1",10); 
private JTextArea commenttext = new JTextArea(); 

private JComboBox combo = new JComboBox(paymentmethod); 

private JButton done = new JButton("DONE!"); 

public void createGUI(){ 

    JFrame frame = new JFrame("Point of Sales"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new FlowLayout()); 
    frame.setBounds(100,100,500,400); 

    gp.add(crunchy1); 
    gp.add(crunchy2); 
    gp.add(hotvariety); 
    gp.add(hotpower1); 
    gp.add(hotpower2); 

    JPanel all = new JPanel(); 
    all.setLayout(new GridLayout(0,1)); 

    JPanel panelItem = new JPanel(); 
    panelItem.setLayout(new FlowLayout()); 

    JPanel panelOption = new JPanel(); 
    panelOption.setLayout(new GridLayout(4,2)); 

    JPanel panelSales = new JPanel(); 
    panelSales.setLayout(new GridLayout(4,2)); 

    JPanel panelTextArea = new JPanel(); 
    panelTextArea.setSize(500, 50); 

    combo.setSelectedIndex(1); 

    done.addActionListener(this); 
    commenttext.setEditable(false); 

    frame.add(all); 
    all.add(panelItem); 
    all.add(panelSales); 
    all.add(panelTextArea); 

    panelOption.add(crunchy1); 
    panelOption.add(crunchy2); 
    panelOption.add(hotvariety); 
    panelOption.add(hotpower1); 
    panelOption.add(hotpower2); 

    panelItem.add(item,BorderLayout.WEST); 
    panelItem.add(panelOption,BorderLayout.EAST); 

    panelSales.add(quantity); 
    panelSales.add(quantitytext); 
    panelSales.add(payment); 
    panelSales.add(combo); 
    panelSales.add(creditCard); 
    panelSales.add(creditCardtext); 
    panelSales.add(done); 

    panelTextArea.add(commenttext); 

    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String args[]){ 
    Sales sale = new Sales(); 
    sale.createGUI(); 
} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 
    if(arg0.getSource()==done) 
    { 
     if(crunchy1.isSelected()) 
     { 
      total=price1*Double.parseDouble(quantitytext.getText()); 
      Object d=combo.getSelectedItem(); 
      String h=d.toString(); 
      commenttext.setText("Selected Item and Price per Unit:" + first + "\nQuantity: "+ quantitytext.getText() + "\nThe amount is RM" + total + " Charged to "+ h +" "+ creditCardtext.getText()); 
     } 

     else if(crunchy2.isSelected()) 
     { 
      total=price2*Double.parseDouble(quantitytext.getText()); 
      Object d=combo.getSelectedItem(); 
      String h=d.toString(); 
      commenttext.setText("Selected Item and Price per Unit:" + second + "\nQuantity: "+ quantitytext.getText() + "\nThe amount is RM" + total + " Charged to "+ h +" "+ creditCardtext.getText()); 
     } 

     else if(hotvariety.isSelected()) 
     { 
      total=price3*Double.parseDouble(quantitytext.getText()); 
      Object d=combo.getSelectedItem(); 
      String h=d.toString(); 
      commenttext.setText("Selected Item and Price per Unit:" + third + "\nQuantity: "+ quantitytext.getText() + "\nThe amount is RM" + total + " Charged to "+ h +" "+ creditCardtext.getText()); 
     } 

     else if(hotpower1.isSelected()) 
     { 
      total=price4*Double.parseDouble(quantitytext.getText()); 
      Object d=combo.getSelectedItem(); 
      String h=d.toString(); 
      commenttext.setText("Selected Item and Price per Unit:" + fourth + "\nQuantity: "+ quantitytext.getText() + "\nThe amount is RM" + total + " Charged to "+ h +" "+ creditCardtext.getText()); 
     } 

     else if(hotpower2.isSelected()) 
     { 
      total=price5*Double.parseDouble(quantitytext.getText()); 
      Object d=combo.getSelectedItem(); 
      String h=d.toString(); 
      commenttext.setText("Selected Item and Price per Unit:" + fifth + "\nQuantity: "+ quantitytext.getText() + "\nThe amount is RM" + total + " Charged to "+ h +" "+ creditCardtext.getText()); 
     } 
    } 
} 

} 

текстовое поле участвует в

private JTextField quantitytext = new JTextField("1",10); 
private JTextField creditCardtext = new JTextField("1",10); 

Как я должен написать попробовать и функцию задвижка(), чтобы ограничить ввод данных пользователем? Потому что количество деталя и номер кредитной карточки только могут принять intergers. Ваша помощь здесь очень понравилась ~

+0

Если вы используете в качестве документа что-то, что расширяет 'AbstractDocument', вы можете использовать' DocumentFilter' – nachokk

+0

, когда я расширяю AbstractDocument, он сказал, что мне нужно реализовать конструктор для класса Sales или же это ошибка. – Nick

+0

вы можете использовать 'PlainDocument', который расширяет' AbstractDocument', по умолчанию компоненты swing text используют что-то, что расширяет 'AbstractDocument' – nachokk

ответ

3

Вы ищете DocumentFilter. Здесь у вас есть официальный учебник, как его реализовать. Implementing a documentFilter. Ваш документ должен распространяться от AbstractDocument. По умолчанию в текстовых компонентах Swing используются подклассы AbstractDocument для своих документов.

myTextField.getDocument().setDocumentFilter(new MyDocumentFilter()) 

class MyDocumentFilter extends DocumentFilter { 

@Override 
public void insertString(DocumentFilter.FilterBypass fb, 
       int offset, 
       String string, 
       AttributeSet attr) 
        throws BadLocationException{ 

      //your business logic here 
      // Example : if it's a number super.insertString(..) else do nothing. 
     } 

} 

Также вы можете использовать JFormattedTextfield. How to use formatted textfields.

+0

Я использую DocumentFilter, как вы сказали здесь, и я не уверен в бизнес-логике того, что писать. Я ставлю это как мой бизнес логин, но ошибки @Override \t общественной ничтожной insertString (DocumentFilter.FilterBypass фб, Int смещения, СТРОКА, AttributeSet атр) \t проливает BadLocationException { \t \t \t если (Double.parseDouble (quantitytext.getText())) \t \t \t { \t \t \t \t commenttext.setText ("Вы только можете ввести количество в целое число!"); \t \t \t} \t \t} – Nick

+0

@Nick чем проблема у вас возникли? .use 'fb.getDocument(). GetText (..)' и 'str' к parseInteger. Вы parsingDouble, это не то же самое, что и Integer – nachokk

+0

. Согласно моему простому требованию к приложению, для текстового поля 'quanttext' и' creditcardtext 'могут принимать номера. До сих пор я не уверен, как работает DocumentFilter, и 'fb. getDocument(). getText (..) 'the' getDocument() 'i получает ошибку: getDocument не может быть разрешен или не является полем – Nick

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