저는 계산기를 Java 애플릿으로 만들고 있습니다. 모든 JButton에 대한 actionListener 등록은 물론 레이아웃을 성공적으로 만들었습니다.getActionCommand()와 일치하는 String 값을 비교할 수없는 이유는 무엇입니까?
String buttonClicked = e.getActionCommand();
// for number buttons
for(int i = 0; i <= 9; i++)
{
if(i == Integer.parseInt(buttonClicked))
answer.setText(answer.getText() + e.getActionCommand());
}
... 제대로 작동 :
그래서, ActionListener를 구현 내 수업에서 나는 숫자 버튼의 모든 코드를 가지고있다. 그럼, 왜 코드가 작동 않습니다
if(buttonClicked.equals("/"))
{
answer.setText(answer.getText() + e.getActionCommand());
}
는 ... 우리는 할 수하지 getActionCommand() 문자열의 내용으로 문자열을 비교하는거야? 아니면 제가해야 할 일을 가져 오지 않았습니까? 당신은 "/"에에서는 parseInt을 시도하는
`
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.*;
public class Part_C extends Applet
{
// answer field here (no panel; JTextField is 100% width without panel)
private JTextField answer = new JTextField();
//answer.setHorizontalAlignment(JTextField.RIGHT); // align input to the right
// JButton array
private JButton[] buttons =
{
// (panel 1) backspace, clear entry, and clear buttons here
new JButton("backspace"),
new JButton("CE"),
new JButton("C"),
// (panel 2, row 1) numbers 7 - 9, divide, and sqare-root buttons here
new JButton("7"),
new JButton("8"),
new JButton("9"),
new JButton("/"),
new JButton("sqrt"),
// (panel 2, row 2) numbers 4 - 6, multiply, and percent buttons here
new JButton("4"),
new JButton("5"),
new JButton("6"),
new JButton("X"),
new JButton("%"),
// (panel 2, row 3) numbers 1 - 3, subtract, and inverse buttons here
new JButton("1"),
new JButton("2"),
new JButton("3"),
new JButton("-"),
new JButton("1/x"),
// (panel 2, row 4) number 0, positive/negative, decimal, addition, and equals buttons here
new JButton("0"),
new JButton("+/-"),
new JButton("."),
new JButton("+"),
new JButton("="),
}; // end of JButton array
// constructor for class Part_C
public Part_C()
{
// first panel for backspace, clear entry, and clear buttons
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(1, 3));
for(int i = 0; i < 3; i++)
panel1.add(buttons[i]);
// second panel for operators and operands
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(4, 5));
for(int i = 3; i < buttons.length; i++)
panel2.add(buttons[i]);
// third panel for BorderLayout of answer JTextField, and first 2 panels
JPanel panel3 = new JPanel(new BorderLayout());
panel3.add(answer, BorderLayout.NORTH);
panel3.add(panel1, BorderLayout.CENTER);
panel3.add(panel2, BorderLayout.SOUTH);
add(panel3); // add panel3 to the JFrame
// action listener created here
ButtonListener listener = new ButtonListener();
// action listener is added to all JButtons here
for (int i = 0; i < buttons.length; i++)
buttons[i].addActionListener(listener);
}
/* overriding the init() method of Applet;
* ...in an Applet, init() is used instead
* of the "main" method */
public void init()
{
// create JFrame
Part_C frame = new Part_C();
// the applet stops when the window/tab is closed
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// inner class ButtonListener
public class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String buttonClicked = e.getActionCommand();
// for number buttons
for(int i = 0; i <= 9; i++)
{
if(i == Integer.parseInt(buttonClicked))
answer.setText(answer.getText() + e.getActionCommand());
}
// for operators
if(buttonClicked.equals("/"))
{
answer.setText(answer.getText() + e.getActionCommand());
}
else if(buttonClicked.equals("sqrt"))
{
answer.setText(answer.getText() + e.getActionCommand());
}
else if(buttonClicked.equals("X"))
{
answer.setText(answer.getText() + e.getActionCommand());
}
else if(buttonClicked.equals("%"))
{
answer.setText(e.getActionCommand());
}
else if(buttonClicked.equals("-"))
{
answer.setText(answer.getText() + e.getActionCommand());
}
else if(buttonClicked.equals("1/x"))
{
answer.setText(e.getActionCommand());
}
else if(buttonClicked.equals("+/-"))
{
answer.setText(e.getActionCommand());
}
else if(buttonClicked.equals("."))
{
answer.setText(answer.getText() + e.getActionCommand());
}
else if(buttonClicked.equals("+"))
{
answer.setText(e.getActionCommand());
}
// for data-clearing operations
if(buttonClicked.equals("backspace"))
{
answer.setText(answer.getText().substring(0, answer.getText().length() - 1));
}
else if(buttonClicked.equals("CE"))
{
}
else if(buttonClicked.equals("C"))
{
answer.setText("");
}
// for the equals button
if(buttonClicked.equals("="))
{
}
}
} // end of inner class buttonListener
} // end of Part_C
실제로 버튼을 actionCommand로 설정 하시겠습니까? 코드가 없으면 내가 생각할 수있는 것입니다. * 편집 : 맞춤법 : P * – mcfinnigan
아냐, 내가 아는 한 "getActionCommand()"를 올바르게 사용하지 않는 설정 ... 위의 전체 코드를 추가했습니다 : –
'.. 애플릿 ../JButton array' Don ' 스윙과 AWT 컴포넌트를 섞는다. 대신에 'JApplet'을 사용하십시오. 또는 더 나은 방법으로, 'JFrame'을 사용하고 필요한 경우 [Java Web Start] (http://stackoverflow.com/tags/java-web-start/info)를 사용하여 링크를 시작하십시오. –