0

私は Java を初めて使用するので、これがあなたが今まで聞いた中で最も愚かなことである場合は、ご容赦ください。

だから、基本的に私は Java でフォームを作成しています。送信されると検証され、エラーが発生した場合は特定のフォーム項目を赤くしたいです。メソッド setAsError() を呼び出すことで、なんとかそれを行うことができました

public void setAsError(){
    this.setBackground(new Color(230,180,180));
}

しかし問題は、フォーム項目 (テキスト フィールド、コンボ ボックス、およびその他のスイング クラスを含む) が既に Java コンポーネントを拡張していることです。

public class KComboBox extends JComboBox {

public KComboBox(String[] s){
    super(s);
    //There's other stuff in here too
}

フォーム項目に setAsError() メソッドを追加したいと考えています。メソッドを必要なすべてのクラスに個別に追加できることはわかっていますが、これは OO プログラミングにとっては少し奇妙に思えます。

いずれにせよ、私がそうするとき、最終結果は

myFormItem.setAsError()

フィールドが赤くなるはずです。

どんな助けでも大歓迎です、そして前もって感謝します。

4

4 に答える 4

4

Java は、複数のインターフェイスの継承をサポートしています。これにより、オブジェクトはさまざまなインターフェイスから多くのメソッド シグネチャを継承できます。

そのため、関連するすべてのクラスに対して method add implement を使用して newinterfaceを作成します。setAsError

何かのようなもの:

public interface ErrorItf {
 public void setAsError();
}

その後、クラスに追加します。

public class KComboBox extends JComboBox implements ErrorItf{

...

  @override
  public void setAsError(){
    this.setBackground(new Color(230,180,180));
  }

}

クラスを呼び出す代わりに、次のようにインターフェイスで呼び出します。

ErrorItf element = getComboBox();
element.setAsError(); 

element.setAsError()特定のタイプがわからない場合でも、オブジェクト(別名)にメッセージを送信する場合、JComboBoxまたはJTextarea... . それをポリモーフィズムといいます

補足として、インターフェースがあなたのケースでどのように役立つかの例

ここに画像の説明を入力

于 2013-10-05T15:08:35.753 に答える
1
public void setAsError(JComponent component){
    if(component instanceof JTextField){
    JTextField field =  (JTextField) component;
    field.setBackground(Color.RED);
    }else if(component instance of JTextArea){
    JTextArea area = (JTextArea) component;
    area.setBackground(Color.RED);
    }
}  

JComponentに引数を追加するだけsetError()で、目的を達成できます。

ここで、ユーザーがフォームの「名前」フィールドを空のままにしていることがわかったとします。彼/彼女が送信ボタンをクリックすると、空の状態をチェックしていると思います。

if(nameField.getText().equals("")){
    this.setAsError(nameField);
}  

さて、エラーがそのフィールドから消えたことがわかったら、背景色を元の色にリセットする必要があると確信しているのでresetError(JComponent compo)、色をデフォルトにリセットする場所も作成することをお勧めします。
現在、背景色は Windows、Mac、Ubuntu で異なる場合があります。あなたがする必要があるのは、アプリケーションの開始時に背景色を取得して保存することです。
エラー状態が解消したら、保存したデフォルト値に設定します。

于 2013-10-05T15:10:27.183 に答える
0

ここでの最善の策は、インターフェイスを作成することです。書くだけ

Interface SetAsErrorable{
    void setAsError();
}

グローバル スコープ内 (または独自のファイル内)。次に、すべてのフォーム アイテム クラスに追加しますimplements SetAsErrorable。いいえKComboBox extendsJComboBox implements SetAsErrorable{

于 2013-10-05T15:08:49.947 に答える
0

インターフェイスを使用すると良いように聞こえます...

public interface errorInterface {
 public setAsError();
}

public class KComboBox extends JComboBox implements errorInterface {

 @Override
 setAsError() {
    this.setBackground(new Color(230,180,180));
 }
}
于 2013-10-05T15:10:32.817 に答える