0

さて、私が作成しているこのプログラムでは、ユーザーは自分のコンピューターでお気に入りのアプリへのショートカットを作成できるようになります。私のプログラムは、アプリのハブのようなものになると思います。ただし、小さな問題があります。これには、との2つのクラスが含まれAppButtonますAppButtonContainer。どちらも実装MouseListenerしますが、AppButton拡張JComponentおよびAppButtonContainer拡張しJPanelます。基本的に、AppButtonをクリックすると、選択されたように見えるように境界線を別の色で描画するように設定されます。それ以外の場合は、境界線を背景色に設定します。ダブルクリックすると、指定したアプリケーションが開きます。AppButtonフォーカスを削除して、境界線を背景色に設定する方法があります。にはAppButtonContainer、パネルがクリックされたときにフォーカスを削除するためのコードが少しあります。AppButton

それが私の問題です。クリックされたAppButtonContainerことに気づきません。トップレベルのコンテナか何かと関係があると思いますが、よくわかりません。誰か助けてもらえますか?

addMouseListener(this)編集: AppButtonContainerのコンストラクターにを入れていないことがわかりました。私がこの問題を解決し、途中で私にヒントを与えるのを手伝ってくれたすべての人に感謝します:)

AppButtonContianer

public class AppButtonContainer extends JPanel implements MouseListener {
private static final long serialVersionUID = 6485231881729120957L;
public List<AppButton> appButtons;
private static final Color BACKGROUND_COLOR = new Color(18, 18, 18);

public AppButtonContainer(List<AppButton> buttons) {
    this.appButtons = buttons;
    setLayout(new GridLayout(5, 5, 20, 20));
    addButtonsToPane();
}

private void addButtonsToPane() {
    List<AppButton> buttons = this.appButtons;
    for (int i = 0; i < buttons.size(); i++) {
        this.add(buttons.get(i));
    }
}

private void removeAllButtonFocus() {
    for (int i = 0; i < this.appButtons.size(); i++) {
        this.appButtons.get(i).removeFocus();
    }
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(BACKGROUND_COLOR);
    repaint();
}

@Override
public void mouseClicked(MouseEvent e) {
    System.out.println("Pane Clicked");
    removeAllButtonFocus();
}

    ...Other MouseEvent methods
4

1 に答える 1

2

addMouseListener(this)AppButtonContainerクラスのコンストラクターを配置することで、手元の問題を解決できます。それ以外の場合は、マウスイベントを取得しません。

ただし、一般的に、クラスをそのようなマウスリスナーに変えるのは良くありません。おそらく、マウスイベントをリッスンし、代わりにそれらをAppButtonContainerに渡す内部クラスを作成してみてください。

于 2012-05-26T12:54:13.583 に答える