Witam.
Meczę się z moim kalkulatorem już od jakiegoś czasu, aż w końcu doszedłem do tego etapu. Nie wiem co robię źle ale nie obsługuje mi klawiatury :(
public class Calculator extends JFrame implements ActionListener, KeyListener{
final static int MAX_INPUT_LENGHT = 10;
private GridBagLayout mainLayout = new GridBagLayout();;
private JButton[] jbDigitsButtons, jbFunctionalButtons;
private JLabel jlDisplayDigit, jlDisplayOperation, conteiner;
private JMenu jmMainMenu;
private JMenuItem jmiInfo;
private JMenuBar jmBar;
public String number1 = "";
public String number2 = "";
public int result = 0;
public boolean operandChoosen = false;
public boolean binOnly = false;
public String choosenOperand;
public Calculator(){
// conteiner = new JLabel();
// add(conteiner);
// conteiner.setLayout(mainLayout);
setLayout(mainLayout);
this.addKeyListener(this);
setTitle("Kalkulator");
//tworzenie menuBar
jmMainMenu = new JMenu("Plik");
jmMainMenu.setFont(new Font("monospaced", Font.BOLD, 26));
jmMainMenu.setBackground(Color.LIGHT_GRAY);
jmMainMenu.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 2, Color.BLACK));
jmiInfo = new JMenuItem("Info");
jmiInfo.setFont(new Font("monospaced", Font.BOLD, 26));
jmiInfo.setBackground(Color.LIGHT_GRAY);
//jmiInfo.setBorder(BorderFactory.createMatteBorder(2, 2, 0, 2, Color.BLACK));
jmBar = new JMenuBar();
jmMainMenu.add(jmiInfo);
jmBar.add(jmMainMenu);
jmBar.setBackground(Color.LIGHT_GRAY);
jmBar.setBorder(BorderFactory.createMatteBorder(2, 2, 0, 2, Color.BLACK));
addMenu(mainLayout, jmBar, 0, 0, GridBagConstraints.REMAINDER, 1, 1, 1);
// tworzenie i dodawanie wyswetlacza
jlDisplayDigit = new JLabel("0");
jlDisplayDigit.setBorder(BorderFactory.createMatteBorder(0, 2, 2, 2, Color.BLACK));
Border border = jlDisplayDigit.getBorder();
Border margin = new EmptyBorder(0,10,10,10);
jlDisplayDigit.setBorder(new CompoundBorder(border, margin));
jlDisplayDigit.setOpaque(true);
jlDisplayDigit.setBackground(Color.WHITE);
jlDisplayDigit.setHorizontalAlignment(SwingConstants.RIGHT);
jlDisplayDigit.setFont(new Font("monospaced", Font.BOLD, 26));
addLabel(mainLayout, jlDisplayDigit, 0, 2, GridBagConstraints.REMAINDER, 1, 1, 1);
jlDisplayOperation = new JLabel(" ");
jlDisplayOperation.setBorder(BorderFactory.createMatteBorder(2, 2, 0, 2, Color.BLACK));
border = jlDisplayOperation.getBorder();
margin = new EmptyBorder(10,10,0,10);
jlDisplayOperation.setBorder(new CompoundBorder(border, margin));
jlDisplayOperation.setOpaque(true);
jlDisplayOperation.setBackground(Color.WHITE);
jlDisplayOperation.setHorizontalAlignment(SwingConstants.RIGHT);
jlDisplayOperation.setFont(new Font("monospaced", Font.BOLD, 26));
addLabel(mainLayout, jlDisplayOperation, 0, 1, GridBagConstraints.REMAINDER, 1, 1, 1);
// tworzenie przyciskow i dodawanie przyciskow
jbDigitsButtons = new JButton[10];
for(int i=0;i<10;i++){
jbDigitsButtons[i] = new JButton(String.valueOf(i));
}
addButton(mainLayout, jbDigitsButtons[7], 0, 4, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[8], 1, 4, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[9], 2, 4, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[4], 0, 5, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[5], 1, 5, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[6], 2, 5, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[1], 0, 6, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[2], 1, 6, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[3], 2, 6, 1, 1, 1, 1);
addButton(mainLayout, jbDigitsButtons[0], 0, 7, 3, 1, 1, 1);
jbFunctionalButtons = new JButton[10];
jbFunctionalButtons[0] = new JButton("BACKSPACE");
jbFunctionalButtons[1] = new JButton("C");
jbFunctionalButtons[2] = new JButton("/");
jbFunctionalButtons[3] = new JButton("*");
jbFunctionalButtons[4] = new JButton("-");
jbFunctionalButtons[5] = new JButton("+");
jbFunctionalButtons[6] = new JButton("MOD");
jbFunctionalButtons[7] = new JButton("BIN");
jbFunctionalButtons[8] = new JButton("DEC");
jbFunctionalButtons[9] = new JButton("=");
addButton(mainLayout, jbFunctionalButtons[0], 0, 3, 3, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[1], 4, 3, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[2], 4, 4, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[3], 4, 5, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[4], 4, 6, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[5], 4, 7, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[6], 5, 3, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[7], 5, 4, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[8], 5, 5, 1, 1, 1, 1);
addButton(mainLayout, jbFunctionalButtons[9], 5, 6, 1, 2, 1, 1);
jbFunctionalButtons[8].setEnabled(false);
jbFunctionalButtons[8].setBackground(new Color(224, 224, 224));
this.addKeyListener(this);
}
private void addButton(GridBagLayout layout, JButton button, int col, int row, int gridwidth, int gridheight,int weightx, int weighty){
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = col;
gbc.gridy = row;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbc.fill = GridBagConstraints.BOTH;
button.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
button.setBackground(Color.LIGHT_GRAY);
button.setFont(new Font("monospaced", Font.BOLD, 21));
layout.setConstraints(button, gbc);
button.addActionListener(this);
add(button);
}
private void addLabel(GridBagLayout layout, JLabel label, int col, int row, int gridwidth, int gridheight,int weightx, int weighty){
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = col;
gbc.gridy = row;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbc.fill = GridBagConstraints.BOTH;
layout.setConstraints(label, gbc);
add(label);
}
private void addMenu(GridBagLayout layout, JMenuBar menuBar, int col, int row, int gridwidth, int gridheight,int weightx, int weighty){
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = col;
gbc.gridy = row;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbc.fill = GridBagConstraints.BOTH;
layout.setConstraints(menuBar, gbc);
add(menuBar);
}
@Override
public void actionPerformed(ActionEvent e){
}
private void addDigit(int digit){
if(operandChoosen){
if(number2.length()<MAX_INPUT_LENGHT){
if(digit != 0 || number2.length() !=0){
number2 += digit;
jlDisplayDigit.setText(number2);
}
else{
jlDisplayDigit.setText("Dzielenie przez 0");
}
}
}
else{
if(number1.length()<MAX_INPUT_LENGHT){
if(digit != 0 || number1.length() !=0){
number1 += digit;
jlDisplayDigit.setText(number1);
}
}
}
}
@Override
public void keyPressed(KeyEvent e){
}
@Override
public void keyReleased(KeyEvent arg0){
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e){
switch(e.getKeyChar()){
case '0': addDigit(0);
break;
case '1': addDigit(1);
break;
case '2': addDigit(2);
break;
case '3': addDigit(3);
break;
case '4': addDigit(4);
break;
case '5': addDigit(5);
break;
case '6': addDigit(6);
break;
case '7': addDigit(7);
break;
case '8': addDigit(8);
break;
case '9': addDigit(9);
break;
// case '/': operationDivision();
// break;
// case '*': operationMultiplication();
// break;
// case '-': operationSubtraction();
// break;
// case '+': operationAddition();
// break;
// case 'C': clean();
// break;
// case '=': equal();
// break;
// //case 'BACKSPACE': backSpace();
// break;
// case 'MOD': operationModuloDivision();
// break;
// case 'BIN': activateBin();
// break;
// case 'DEC': activateDec();
// break;
}
}
}