私は実際に数学的な事実を持つ掛け算表を作成しようとしていますが、それは押されたときに製品に変わり、その後再び押されたときの事実に戻ります。最初の部分を手に入れましたが、元のボタン設定に戻す方法を理解できません。私のプログラムは2つのクラスで構成されています。最初にボタンを作成し、オリジナルのファクトを挿入します。ネストされたループを使用して、ボタンにテキスト(数学ファクト)を書き込みます。ボタンの位置(列、行)に基づいて整数を作成するにはどうすればよいですか?
import java.awt.ComponentOrientation;
import java.awt.GridLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class Grid {
public static void main(String args[]){
JFrame frame = new JFrame("Grid Layout");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout (9, 9, 5, 5));
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
int i, j;
for (i = 1; i<=9; i++){
for (j = 1; j <= 9; j++){
FactButton button =new FactButton();
button.setText(i + " x " + j);
panel.add(button);
}
}
frame.add(panel);
}
}
2番目のクラスでは、押されたときのボタンの種類を定義します。私は2つのケースを作った。最初はデフォルトで、2番目のボタンは製品を提示するために変更されます。初めて押すとうまく動作します。ボタンを2回押すとエラーメッセージが表示され、何も変わりません。最初のケースをパネルのボタンの位置(列、行)の に基づく整数に変更できますか?これはどうすればいいですか?その他の提案?
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.awt.event.ActionEvent;
public class FactButton extends JButton implements ActionListener{
private static final long serialVersionUID = 1L;
public FactButton() {
this.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String prob = this.getText();
String left = prob.substring(0, prob.indexOf(" "));
String right = prob.substring(prob.indexOf(" ")+3, prob.length() );
int i = Integer.parseInt(left);
int j = Integer.parseInt(right);
int v=0;
v++;
v%=2;
switch(v){
case 0:
this.setText(null);
break;
case 1:
this.setText(i*j+"");
this.setBackground(Color.WHITE);
this.setContentAreaFilled(false);
this.setOpaque(true);
break;
}
}
}
最初に押すと製品に切り替わります。秒で壊れます。空白のボタンに戻ると思った。元の数学の事実を表示するにはどうしたらいいですか?
これは別の関連するオプションです:) – Cukic0d
私も "これも試してみるよあなたたちは素晴らしいですe! – Brook