尝试将ActionListener放在按钮上然后使其绘制文本

时间:2017-09-08 18:21:04

标签: java swing jbutton actionlistener paint

我仍然是java的新手,我前一段时间写了一个神奇的8球程序。我刚刚了解了JFrames和JPanels,所以我想更新它。  我有几件事情有困难,我不知道这是否要求太多,因为之前从未使用过这个网站。我不太了解actionlisteners,我需要帮助把一个放在b按钮上,使它绘制一个新的JPanel,绘制我的随机选择器语句。那是另一回事,我如何让它绘制我的一个数组元素?

window

   package pack;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import javax.swing.*;

 public class window extends ball  {
 public static void main (String []args) {
    JFrame f = new JFrame("hello");
    JPanel p = new JPanel();
    JLabel l = new JLabel("What do you ask the magic conch shell?");
    JTextField t = new JTextField(25);
    JButton b = new JButton();

    b.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {                        }
           });
        //panel
    b.setText("Ask");
    p.add(l);
    p.add(b);
    p.add(t);

    //frame
    f.add(p);
    f.setSize(300, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }}

ball

     package pack;

    import java.util.Scanner;
    import java.util.Random;

    public class ball  {
    public static void main(String[]args) {
     String question = ("What do you ask the Magic Conch shell?");
      Scanner userInput =new Scanner(System.in);
       String answer = userInput.nextLine();

    String[] array;
     array = new String[8];
     array[0] = ("yes");
     array[1] = ("no");
     array[2] = ("maybe");
     array[3] = ("never");
     array[4] = ("ask again later");
     array[5] = ("positive");
     array[6] = ("unlikely");
     array[7] = ("yes");

     Random dice = new Random();
     int n = dice.nextInt(8);
     System.out.println(array[n]);
    }
    }

1 个答案:

答案 0 :(得分:0)

从你的ball类中获取代码,使用它来创建一个返回roll结果的方法,这为你提供了一个重用点

public class Ball {

    private String[] results = new String[] {
        "yes", "no", "maybe", "never", "ask again later", "postive", "unlikely", "yes"
    };

    private Random random = new Random();

    public String roll() {
        int n = random.nextInt(results.length);
        return results[n];
    }

}

现在,在您的按钮ActionListener中,您需要" roll"球

Ball ball = new Ball();
b.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {                        
        String result = ball.roll();
    }
});

现在,您接下来的问题是,您实际上无法显示结果。

如果你能提供帮助,你真的不想在这个阶段引入一个新的组件,相反,你想要一个可以使用的组件,所以,让我们添加另一个JLabel充当"答案"

Ball ball = new Ball();
JLabel answer = new JLabel("...");
b.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String result = ball.roll();
        answer.setText(result); 
    }
});
//panel
b.setText("Ask");
p.add(l);
p.add(b);
p.add(t);
p.add(answer);

在运行时添加组件并不困难,但它确实引入了一些您需要注意的其他问题。在这方面,我们通过引入一个我们可以根据需要简单更新的组件来限制一些问题