私のJLabelの更新が困難な最終的な電卓を作っています。ラベルが初期化されると、opNum
の開始値が表示されますが、メソッドが呼び出されてopNum
の末尾に数値が追加されたときは、更新されません。私はそれが再描画されていないかどうか、または私はボタンからメソッドを呼び出すとき何かが間違っているかどうかはわかりません。私は何か愚かか悪いか、あるいはその両方をやっている。助けて?ボタンを押したときにJLabelが更新されない
のJLabelと方法クラス:
import javax.swing.*;
import java.awt.*;
public class NumberText extends JPanel
{
private JLabel opNumLabel;
private String opNum;
private double storeNum = 0;
private boolean firstOp = true;
private char op;
private char sign = '+';
//Panel for Number
public NumberText()
{
//I heard that it could be an issue with the Label not having enough space, though this didnt help
opNumLabel = new JLabel ("1234567890111");
opNumLabel.setText(opNum);
add(opNumLabel);
setPreferredSize (new Dimension (150, 40));
setBackground (Color.white);
}
//Clears the current typed number
public void Clear()
{
opNum = "";
opNumLabel.setText(opNum);
}
//Sets it back to conditions like the start of the program
public void ClearAll()
{
opNum = "";
storeNum = 0;
firstOp = true;
opNumLabel.setText(opNum);
}
//for storing the operation
public void OpStore (char newOp)
{
op = newOp;
firstOp = false;
}
//for adding to the opNum
public void Edit (String button)
{
opNum = opNum + button;
opNumLabel.setText(opNum);
opNumLabel.repaint();
}
//for testing for the first Operation
public boolean IsFirstOp()
{
return firstOp;
}
//for changing the sign
public void SignChange()
{
if (sign == '+')
{
opNum = "-" + opNum;
opNumLabel.setText(opNum);
sign = '-';
}
else if (sign == '-')
{
opNum.replaceAll("-", "");
opNumLabel.setText(opNum);
sign = '+';
}
}
//for storing a number when an operation is pressed
public void StoreNum()
{
storeNum = Double.parseDouble(opNum);
opNum = "";
}
//Math when an Operation is to be done
public void Operation()
{
double value = Double.parseDouble(opNum);
double total = 0;
switch(op)
{
case '+': total = storeNum + value;
break;
case '-': total = storeNum - value;
break;
case '/': total = storeNum/value;
break;
case '*': total = storeNum * value;
break;
case '%': total = storeNum % value;
break;
}
opNum = Double.toString(total);
opNumLabel.setText(opNum);
}
}
ボタン例:actionPerformed(...)
で
public class Button1 extends JPanel
{
private JButton push;
private JLabel label;
public Button1()
{
push = new JButton ("1");
push.addActionListener (new ButtonListener());
add (push);
}
private class ButtonListener implements ActionListener
{
public void actionPerformed (ActionEvent event)
{
//to avoid non-static cant be ref by static
NumberText NumberText = new NumberText();
NumberText.Edit("1");
}
}
}
あなたは大文字で、あなたのメソッドの名前を開始するべきではありません。 – Dave
また、Button1クラスがJPanelの代わりにJButtonを拡張してはいけませんか? – Dave
なぜ私はJButtonとしてそれを置くとき、ボタンが巨大で、奇妙に見えるかわかりません。だから、それを残した。 –