将JButton与功能相关联,更改线条的颜色

时间:2016-10-29 17:59:43

标签: java jbutton

我是JButton和JFrame的新手,只是想学习一些基础知识,关于逻辑应该如何工作以及代码应该是什么样子。在这里,我已经创建了一个逻辑概念,但它并没有起作用。我不确定我是否只需要调整一些东西,或者我是否真的错了。再一次,我是新手,只是想学习基础知识。感谢您的任何帮助。它应该做的是在单击按钮时更改线条的颜色。 :)

JButton yellow = new JButton();

    public SimplePaint(){

    JPanel panel=new JPanel();
    yellow.setBackground(Color.yellow);
    panel.add(yellow);  

    public void paint(Graphics g) {

    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    Line2D line = new Line2D.Float(0, 250, 2000, 300);
    g2.setColor(Color.MAGENTA);
    g2.draw(line);

    JButton color = null;

    if (color == yellow) {
        g2.setColor(Color.YELLOW);
    }

更新:我已经实现了以下答案,我认为我越来越近了,但功能仍然无效。这是更新的代码:

JButton action =new JButton();
JButton red = new JButton();
JButton blue = new JButton(); 

public SimplePaint() {

blue.setBackground(Color.BLUE);    
    panel.add(blue);

red.setBackground(Color.RED);
    panel.add(red);

public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    Line2D line = new Line2D.Float(0, 250, 2000, 300);
    g2.setColor(Color.MAGENTA);
    g2.setStroke(new BasicStroke(3));
    g2.draw(line);    

    action.addActionListener(new ActionListener() {     
        public void actionPerformed(ActionEvent e) {
        if (e.getSource() == blue) {
            g2.setColor(Color.BLUE);
        }
        else if(e.getSource() == red) {
            g2.setColor(Color.RED);
        }
        repaint();
        }
    });

}

2 个答案:

答案 0 :(得分:1)

您需要为按钮添加一个侦听器,以便它们可以触发操作

jBUtton.addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
    System.out.println("Button Pressed");
    //pressed = !pressed; // if you want to toggle
    pressed = true;
    this.repaint(); // you need to refresh the screen 
  } 
} );

之后

if(pressed)
    g2.setColor(Color.YELLOW);
else
    g2.setColor(Color.MAGENTA);

答案 1 :(得分:0)

您展示的代码太不完整,我们无法真正看出错误。 你定义了一个SimplePaint构造函数(但是没有显示SimplePaint的声明方式 - 它是否像JFrame的JPanel那样扩展了一些类?)。然后你在该构造函数中非法定义了一个paint()方法。

首先,扩展JFrame很少是一个好主意。你的类应该扩展JPanel,你应该覆盖paintComponent(),而不是paint()。然后,您只需创建一个JFrame并将SimplePaint实例添加到它。