点击一下即可

时间:2015-08-09 15:49:41

标签: java mouseevent

我有一个awk '{ D[$2]++ A[$2 FS $4]++ B[$2 FS $4 FS $3] = B[$2 FS $4 FS $3] ? B[$2 FS $4 FS $3] "," $1 : $1 if(!tmp[$2 FS $4 FS $3]++)order[++c]=$2 FS $4 FS $3 } function orderp(subs,mains){ for(j in B){ if(j==subs){ split(j,X) if(X[1] FS X[2] == mains) print X[3]"="B[j] } } } END{ for(k in D){ print k"("D[k]")" for(i in A){ split(i,X) if(k == X[1]){ print X[2]"("A[i]") " for(m=1;m<=c;m++){ orderp(order[m],i) } print "" } } } } ' p.txt 来显示问题调用Qus,我有4 JTextPane,A,B,C,D。并且在不同的页面上有五个问题。当您选择正确答案a,b,c或d时,会向JLabel来电JLabel添加10点。

但我的问题是,是时候点击a,b,c,d再次,再次添加10。我只是希望它在每个页面上添加10次,如果下一页上的答案是正确的,它应该在页面上添加另外10个而不是多个10或者答案,这将是一个作弊。

这是代码

Counter

请注意,这只是一个问题和答案。在我的项目中,我有20个。我只想让每个按钮添加10次,并在多次点击时添加它感谢

4 个答案:

答案 0 :(得分:0)

我猜问题是什么:只要发生鼠标事件(mouse_pressed,mouse_down,mouse_release),就会调用AmouseClicked方法。所以这应该可以解决问题。

 If(callquestion==1 && D.isFocusable())

需要

 If(callquestion==1 && D.isFocusable() && evt.getModifiersEx()==MouseEvent.MOUSE_PRESSED)

答案 1 :(得分:0)

不是直接存储积分而是使用地图(问题,答案)来存储用户给出的答案:

// somewhere in your main programme
List<Integer> userAnswers;
List<Integer> correctAnswers;

...

// at programme startup initialise to #answers
userAnswers = Arrays.toList(new Integer[20]); // create list full of null
correctAnswers = new ArrayList<Integer>();
for(int i = 0; i < 20; ++i)
    correctAnswers.add(0); // set all correct answers to #a (change this accordingly)

...

// when user answers question #q with answer #a
userAnswers.set(q, a); // set answer at #q to #a
Counter.setText(getScore() + " "); // update the counter every time the list changes!

...

// getScore counts up the awarded points for all questions
private int getScore() {
    int sum = 0;
    for(int q = 0; q < correctAnswers.size(); ++q) {
        int expected = correctAnswers.get(q); // assume initialised
        Integer actual = userAnswers.get(q); // may be null
        if(actual != null && actual == expected)
            sum += 10; // or have a third list indicating how many points each question awards
    }
}

这还有其他优点,比如你能够告诉用户他到底准确找到了哪些答案,以及哪些答案出错了。

答案 2 :(得分:0)

如果我理解正确,我相信这是解决问题的更好方法:

您在设置中执行的操作:

JLabel a = new JLabel()
a.addMouseListener(new MouseAdapter()  
{  
    public void mouseClicked(MouseEvent e)  
    {  
        aclicked();
    }  
});

JLabel b = new JLabel()
b.addMouseListener(new MouseAdapter()  
{  
    public void mouseClicked(MouseEvent e)  
    {  
        bclicked();
    }  
});
//do this for c and d as well

如果给出了正确答案,那么您可以通过这些方法查看是否给出了正确答案。

答案 3 :(得分:0)

由于您一次只能提出一个问题,为什么不重复使用该页面呢? :)

首先,我们创建一个问题类......

class Question{
    String question;
    String answer1, answer2, answer3, answer4;
    int userAnswer;
    int correctAnswer;
    boolean scoredPoints;
    Question(String q, int correct, String a1, String a2, String a3, String a4){
        this.question = q;
        this.correctAnswer = correct;
        this.answer1 = a1;
        this.answer2 = a2;
        this.answer3 = a3;
        this.answer4 = a4;

    }
}

然后我们可以创建问题......

Question q1 = new Question("1+1",1,"2","4","6","8");
//constructor is question, correct answer, ans 1, 2, 3, 4.

然后创建一个问题清单......

ArrayList<Question> questions = new ArrayList<>();

将问题添加到列表中......

questions.add(q1);

然后你做同样的事情来提出问题,但是,你会引用问题.get(x)其中x是问题编号(减1,因为数组索引0等于对象1) 。

当用户按下某个按钮(例如A)时,您可以调用actionlistener并调用:

questions.get(x).scoredPoints = true; //prevents cheating
questions.get(x).userAnswer = buttonNumber; //sets user question answer
在这种情况下,

x是当前的问题编号。

通过这种方式,您可以获得连续的问题流,他们的答案将被记录和检查,并且他们不能“作弊”。