3

私は2つJPanelの割り当てに取り組んでいます。一方のパネルにはデフォルトで移動する移動ボールが含まれ、もう一方のパネルにはJRadioButtonとのラベルが付いた2つのsがOnありOffます。私が立ち往生している部分は、ユーザーがパネルをクリックしてボールを再配置できるようにするMouseListener( )を無効にして有効にすることです。( )を使用してトリガーP2.javaされる関数を作成turnOnしました。これにより、ボールが開始および停止します。使用しようとしましたが、コンパイラがメソッドを使用できないというエラーをスローします。turnOffActionListenerP1.javaremoveActionListener

さらに、この例ItemListenerではlikeを使用する方が簡単で、すでに選択されている場合は無視されますか?JRadioButton

P1.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class P1 extends JPanel
{
    private JRadioButton on = new JRadioButton("On", true);
    private JRadioButton off = new JRadioButton("Off");

    public P1()
    {
        ButtonGroup group = new ButtonGroup();
        group.add(on);
        group.add(off);

        add(on);
        add(off);

        ButtonHandler bh = new ButtonHandler();
        on.addActionListener(bh);
        off.addActionListener(bh);
    }

    private class ButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            if(ae.getSource() == on) turnOn();

            if(ae.getSource() == off) turnOff();
        }
    }

    public static void turnOn () {
        Ball.dx = 1;
        Ball.dy = 1;
    }

    public static void turnOff () {
        Ball.dx = 0;
        Ball.dy = 0;
    }
}

P2.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class P2 extends JPanel implements MouseListener
{
    public P2()
    {
        super();
        addMouseListener(this);
    }

    public void mousePressed(MouseEvent e)
    {
        ball.x = e.getX();
        ball.y = e.getY();
        repaint();
    }

    ...
}

プロジェクトの残りの部分

4

2 に答える 2

6

コードを見ずに、MouseListener の動作をその状態に依存させるだけです。ゲッターとセッターを備えた有効と呼ばれる状態ブール変数を与え、有効が偽の場合はコードを短絡します。つまり、特定のメソッドは次のようになります。

public void mousePressed(MouseEvent mEvt) {
  if (!enabled) {
    return;
  }
  // rest of mousePressed goes here
}

別の提案、これをしないでください:

public class P2 extends JPanel implements MouseListener {

クラスに多くのことを要求しているため、GUI クラスにリスナー インターフェイスを実装させないでください。これは、おもちゃのプログラムや非常に小さなデモ プログラムでは問題ありませんが、より大きなプロジェクトでは、コントロールからビューからロジックを分離する必要があります。

于 2013-02-05T03:06:34.670 に答える
1

ガラス板を使用してユーザーの操作をブロックすることもできます

例:ブロック イベント

于 2013-02-05T04:12:53.713 に答える