ループと「BorderLayout」に問題があります。ドライバーを使用してこれをコンパイルして実行すると、add.west(etc) が進行中の add.west によって上書きされているようです。「南」パネルの 9 番目のコンポーネントだけが残っており、「東」と「西」は完全に空です。「for (int i=0; i<8; i++){」を「for (int i=0; i<2; i++){」に変更すると、必要な 9 の 2 番目の要素のみが取得されます。 「西」パネル。誰でも理由を教えてください。私の無知を許してください。私は初心者です。
ありがとうございました。ジョー
これは大まかに次のようになります。
(WEST) (EAST)
btn0, label0, label0 btn4, label4, label4
btn1, label1, label1 btn5, label5, label5
btn2, label2, label2 btn6, label6, label6
btn3, label3, label3 btn7, label7, label7
(SOUTH)
btn8, label8, label8
//コードはここから始まります:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.NumberFormat;
public class CoinPanel extends JPanel{
private JButton buttons[] = new JButton[9];
private JLabel multiplySign[] = new JLabel[9];
private JLabel coinCount[] = new JLabel[9];
String [] names= {"1c", "2c", "5c", "10c", "20c", "50c", "€1", "€2", "Reset"};
int [] values= {1, 2, 5, 10, 20, 50, 100, 200, 0};
public CoinPanel(){
for (int i=0; i<8; i++){
buttons[i] = new JButton(names[i]);
buttons[i].addActionListener(new BtnListener());
coinCount[i] = new JLabel("0", JLabel.CENTER);
coinCount[i].setBorder(BorderFactory.createLineBorder(Color.black));
multiplySign[i] = new JLabel ("x", JLabel.CENTER);
// ここからのレイアウト:
setLayout (new BorderLayout());
JPanel west= new JPanel();
west.setBackground(Color.BLACK);
JPanel east= new JPanel();
east.setBackground(Color.RED);
JPanel south= new JPanel();
south.setBackground(Color.BLUE);
if(i<4){
west.add (buttons[i]);
west.add (multiplySign[i]);
west.add (coinCount[i]);
}
else if(i<8){
east.add (buttons[i]);
east.add (multiplySign[i]);
east.add (coinCount[i]);
}
else{
multiplySign[i].setText("TOTAL");
south.add (multiplySign[i]);
south.add (coinCount[i]);
south.add (buttons[i]);
}
add(west, BorderLayout.WEST);
add(east, BorderLayout.EAST);
add(south, BorderLayout.SOUTH);
}
setPreferredSize (new Dimension(450,300));
}
//ここまで^^
private class BtnListener implements ActionListener{
public void actionPerformed (ActionEvent event){
String [] text = new String[9];
int [] intArray = new int [9];
double sum =0;
for (int i=0; i<(intArray.length-1); i++){
if(event.getSource() == buttons[i]){
text[i] = coinCount[i].getText();
intArray[i]=Integer.parseInt(text[i]);
intArray[i] = ((intArray[i]) +1);
coinCount[i].setText(intArray[i] + "");
}
if(event.getSource() == buttons[8]){
coinCount[i].setText("0");
}
sum += (Integer.parseInt(coinCount[i].getText())*values[i]);
NumberFormat nf = NumberFormat.getCurrencyInstance();
coinCount[8].setText(nf.format(sum/100)+"");
}
}
}
}
//そしてこれがドライバーです:
import javax.swing.*;
public class CoinSorter{
public static void main(String[] args){
JFrame frame = new JFrame ("Coin Counter Example");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
CoinPanel panel = new CoinPanel();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}