2016-01-29 53 views
0

我一直堅持在這一兩天了(第一次使用多個ActionListener,所以忍受着我)。Java | ActionListeners在兩個JButtons中,沒有任何反應

我有兩個按鈕,每個按鈕都有一個actionlistener用於將圖形移動到左側或右側。

然而,無論行動者是否似乎無法正常工作,或者行爲執行者無法正常工作。

建議非常感謝,我試過將它們切換到Action,正如本論壇其他地方所建議的那樣,但是這也沒有奏效。

package h03verplaatsbarebal; 

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

public class Paneel extends JPanel implements ActionListener{ 

//declare objects 
private JButton knopLinks; // moves ball to left 
private JButton knopRechts; // moves ball to right 

//constants 
private int horizontalePlaats; // variabele voor horizontale plaats 
private int VERPLAATSING; // constante voor verplaatsing 

/*create panel with 2 buttons (to left, to right) and a ball*/ 
public Paneel() { 
    //create objects 
    knopLinks = new JButton ("Naar links"); 
    knopLinks.addActionListener(this); 
    knopRechts = new JButton ("Naar rechts"); 
    knopRechts.addActionListener(this); 

    //Tooltips 
    knopLinks.setToolTipText("Klik hier om de bal naar links te bewegen"); 
    knopRechts.setToolTipText("Klik hier om de bal naar rechts te bewegen"); 

    //add to window 
    add(knopLinks); 
    add(knopRechts); 
} 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    int midden = getWidth()/2; // halfway screen 
    int balDiameter = 50; 
    int ovaalDiameter = 25; 
    horizontalePlaats = midden; 

    //draw line 
    g.setColor(Color.GREEN); 
    g.drawLine(30, getHeight() - 30, getWidth() -30, getHeight() - 30); //lijn 
    //draw ball 
    g.setColor(Color.ORANGE); 
    g.fillOval(horizontalePlaats - balDiameter, getHeight() - 130, 100, 100); // oranje bal 
    g.setColor(Color.BLACK); 
    g.drawOval(horizontalePlaats - balDiameter, getHeight() - 130, 100, 100); //lijn van bal 
    g.setColor(Color.BLACK); 
    g.drawOval(horizontalePlaats - ovaalDiameter, getHeight() - 130, 50, 100); // binnen lijnen 
} 

/*clicking buttons*/ 
public void actionPerformed(ActionEvent e) { 
    VERPLAATSING = 15; 
     if (e.getSource() == knopLinks){ //move to left 
      horizontalePlaats = horizontalePlaats - VERPLAATSING; 
     } 
     else { //move to right 
      horizontalePlaats = horizontalePlaats + VERPLAATSING; 
     } 

    repaint(); // paint again 
} 
} 
+3

嘗試使用sysout,那麼你知道它的調用與否。 – Satya

+0

你也可以嘗試,你知道嗎,調試? – SeniorJD

回答

1

您的動作監聽器應該可以工作,但它所做的只是修改horizontalePlaats的值。

問題是horizontalePlaatsmidden的值覆蓋在paintComponent中,所以您從不會看到執行操作的結果。

horizontalePlaats = midden; 
0

你正在壓倒你的油漆中的horizo​​ntalePlaats。

int midden = getWidth()/2; // halfway screen 
int balDiameter = 50; 
int ovaalDiameter = 25; 
horizontalePlaats = midden; 

我認爲你的動作偵聽器很好,但你只需要初始化horizo​​ntalePlaats到中間。

您可以將這個

int midden = getWidth()/2; // halfway screen 
horizontalePlaats = midden; 

您Paneel構造。