私は学習目的のための簡単なキーパッドと表示プログラムを作成しようとしています。しかし、私はそれが働いている私は別のクラスのオブジェクトと対話するためのより良い方法があるのだろうかと思っています。Java異なるクラスのオブジェクトとのやりとり
KeypadPanelという名前のクラスが作成されました。これは、グリッドレイアウトのパネルで、すべてのボタンが追加されています。次に、ActionListenerを作成し、それを各ボタンのイベントとともにボタンにアタッチしました。私はこのパネルをボーダーレイアウトパネルの中央に追加しました。
次に、境界線レイアウトパネルのNorthセクションに追加されるラベルを保持するDisplayPanelクラスを作成しました。しかし私はまだ新しくJavaを学んでいるので、DisplayPanelのラベルとやり取りできる唯一の方法は、ラベルを静的にし、setDisplayメソッドを静的にすることです。次に、ButtonListener内から呼び出すことができ、表示を変更することができます。
はここにあなたがpublic
ないprivate
としてそれらを宣言する必要があり、他のクラス内のオブジェクトを操作するには、キーパッド、ディスプレイおよびメインクラス
public class KeypadPanel extends JPanel {
// setup button objects
private JButton b1 = new JButton("1");
private JButton b2 = new JButton("2");
private JButton b3 = new JButton("3");
private JButton b4 = new JButton("4");
private JButton b5 = new JButton("5");
private JButton b6 = new JButton("6");
private JButton b7 = new JButton("7");
private JButton b8 = new JButton("8");
private JButton b9 = new JButton("9");
private JButton b0 = new JButton("0");
private JButton bStar = new JButton("*");
private JButton bPound = new JButton("#");
public KeypadPanel() {
// setup panel
setLayout(new GridLayout(4, 3));
setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.black));
setPreferredSize(new Dimension(150, 150));
// add listeners to buttons
b1.addActionListener(new ButtonListener());
b2.addActionListener(new ButtonListener());
b3.addActionListener(new ButtonListener());
b4.addActionListener(new ButtonListener());
b5.addActionListener(new ButtonListener());
b6.addActionListener(new ButtonListener());
b7.addActionListener(new ButtonListener());
b8.addActionListener(new ButtonListener());
b9.addActionListener(new ButtonListener());
b0.addActionListener(new ButtonListener());
bStar.addActionListener(new ButtonListener());
bPound.addActionListener(new ButtonListener());
// add buttons to panel
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(bPound);
add(b0);
add(bStar);
}
// setup listener for buttons
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// determine which button raised event and call setDisplay
if (e.getSource() == b1) {
DisplayPanel.setDisplay("1");
} else if (e.getSource() == b2) {
DisplayPanel.setDisplay("2");
} else if (e.getSource() == b3) {
DisplayPanel.setDisplay("3");
} else if (e.getSource() == b4) {
DisplayPanel.setDisplay("4");
} else if (e.getSource() == b5) {
DisplayPanel.setDisplay("5");
} else if (e.getSource() == b6) {
DisplayPanel.setDisplay("6");
} else if (e.getSource() == b7) {
DisplayPanel.setDisplay("7");
} else if (e.getSource() == b8) {
DisplayPanel.setDisplay("8");
} else if (e.getSource() == b9) {
DisplayPanel.setDisplay("9");
} else if (e.getSource() == b0) {
DisplayPanel.setDisplay("0");
} else if (e.getSource() == bStar) {
DisplayPanel.setDisplay("*");
} else if (e.getSource() == bPound) {
DisplayPanel.setDisplay("#");
} else {
return;
}
}
}
------------
}
public class DisplayPanel extends JPanel {
// setup display label object
private static JLabel display = new JLabel("");
public DisplayPanel() {
// setup panel and add label
setPreferredSize(new Dimension(200, 25));
setBorder(BorderFactory.createLineBorder(Color.black, 3));
add(display);
}
/**
* @param incoming
* the text to add to the display
*/
public static void setDisplay(String incoming) {
// get the incoming string and add to existing display string
String current, changed;
current = display.getText();
changed = current.concat(incoming);
display.setText(changed);
}
/**
*
* clears the current text from the display
*/
public static void clearDisplay() {
// clears display
display.setText("");
}
}
-----------------
public class KeypadTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//setup frame
JFrame frame = new JFrame ("Keypad Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setup main panel and layout
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(3, 3));
//create panel objects to fill frame and panel
KeypadPanel keypad = new KeypadPanel();
ClearPanel clear = new ClearPanel();
DisplayPanel display = new DisplayPanel();
// add to main panel
panel.add(display, BorderLayout.NORTH);
panel.add(keypad, BorderLayout.CENTER);
panel.add(clear, BorderLayout.EAST);
// setup frame
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
本当にわかりません。具体的にどの部分についてお考えですか?私は、その反復ボタン定義/処理コードをリファクタリングするかもしれません。 –