将 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 实例添加到它。
我是 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 实例添加到它。