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

Correlating JButton with Functionality, Changing the color of a line

我是 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();
        }
    });

}

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

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);

您显示的代码太不完整,我们无法真正看出问题所在。 您定义了一个 SimplePaint 构造函数(但不显示 SimplePaint 是如何声明的 - 它是否扩展了一些 class 像 JFrame 的 JPanel ?)。那么你在该构造函数中非法定义了一个 paint() 方法。

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