gpt4 book ai didi

java - JButtons 和 ActionListeners 的问题

转载 作者:行者123 更新时间:2023-11-29 08:12:05 26 4
gpt4 key购买 nike

所以我有一个带有多个 JButton 的绘图程序,我知道如何将该按钮与单击该按钮的操作相关联的唯一方法是执行类似 if (e.ActionCommand().equals("Label of the button here"); 如果标签匹配,我知道我有正确的操作。但这是我的问题。我试图将我的 JButtons 更改为图像,而不是让 JButton first = new JButton("Hello");我试图让 JButton first = new JButton(new ImageIcon("c:/.....")) 然后有图像,这有效。但是我的问题是,在此之后我不知道如何引用按钮以使其实际执行某些操作。谢谢!!!

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;


public class PaintProgram extends JPanel implements MouseListener,ActionListener
{
public static int stroke, eraser = 0;
private int xX1, yY1 , xX2, yY2, choice ;

public static void main(String [] args)
{
new PaintProgram();
}

PaintProgram()
{


JFrame frame = new JFrame("Paint Program");
frame.setSize(1200, 800);
frame.setBackground(Color.WHITE);
frame.getContentPane().add(this);


JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu help = new JMenu("Help");
menuBar.add(help);
JMenuItem about = new JMenuItem("About");
help.add(about);
about.addActionListener(this);



JButton button1 = new JButton("Clear");
button1.addActionListener(this);
JButton color = new JButton("Color");
color.addActionListener(this);
JButton erase = new JButton("Erase?");
erase.addActionListener(this);
JButton button2 = new JButton("Empty Rect");
button2.addActionListener(this);
JButton button3 = new JButton("Filled oval");
button3.addActionListener(this);
JButton button4 = new JButton("Filled Rect");
button4.addActionListener(this);
JButton button5 = new JButton("Empty oval");
button5.addActionListener(this);
JButton button6 = new JButton("Line");
button6.addActionListener(this);
JRadioButton thin = new JRadioButton("Thin Line");
thin.addActionListener(this);
JRadioButton medium = new JRadioButton("Medium Line");
medium.addActionListener(this);
JRadioButton thick = new JRadioButton("Thick Line");
thick.addActionListener(this);


ButtonGroup lineOption = new ButtonGroup( );
lineOption.add(thin);
lineOption.add(medium);
lineOption.add(thick);

this.add(button1);
this.add(color);
this.add(erase);
this.add(button2);
this.add(button3);
this.add(button4);
this.add(button5);
this.add(button6);
this.add(thin);
this.add(medium);
this.add(thick);
addMouseListener(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
if(grid == null){
int w = this.getWidth();
int h = this.getHeight();
grid = (BufferedImage)(this.createImage(w,h));
gc = grid.createGraphics();
gc.setColor(Color.BLUE);
}

g2.drawImage(grid, null, 0, 0);
check();
}
BufferedImage grid;
Graphics2D gc;


public void draw()
{
Graphics2D g = (Graphics2D)getGraphics();
int w = xX2 - xX1;
if (w<0)
w = w *(-1);

int h = yY2-yY1;
if (h<0)
h= h*(-1);

switch(choice)
{
case 1:
check();
gc.drawRect(xX1, yY1, w, h);
repaint();
break;

case 2:
check();
gc.drawOval(xX1, yY1, w, h);
repaint();
break;

case 3:
check();
gc.drawRect(xX1, yY1, w, h);
gc.fillRect(xX1, yY1, w, h);
repaint();
break;

case 4:
check();
gc.drawOval(xX1, yY1, w, h);
gc.fillOval(xX1, yY1, w, h);
repaint();
break;

case 5:

if (stroke == 0)
gc.setStroke(new BasicStroke (1));
if (stroke == 1)
gc.setStroke(new BasicStroke (3));
if (stroke == 2)
gc.setStroke(new BasicStroke (6));
gc.drawLine(xX1, yY1, xX2, yY2);
repaint();
break;

case 6:
repaint();
Color temp = gc.getColor();
gc.setColor(Color.WHITE);
gc.fillRect(0, 0, getWidth(), getHeight());
gc.setColor(temp);
repaint();
break;

case 7:

if (eraser == 1)
{
gc.clearRect(xX1, yY1, w, h);
}
else
{

}
break;
}
}

public void check()
{
if (xX1 > xX2)
{
int z = 0;
z = xX1;
xX1 = xX2;
xX2 =z;
}
if (yY1 > yY2)
{
int z = 0;
z = yY1;
yY1 = yY2;
yY2 = z;
}
}




public void actionPerformed(ActionEvent e)
{

if (e.getActionCommand().equals("Color"))
{
Color bgColor
= JColorChooser.showDialog(this,"Choose Background Color", getBackground());
if (bgColor != null)
gc.setColor(bgColor);
}


if (e.getActionCommand().equals("About"))
{
System.out.println("About Has Been Pressed");
JFrame about = new JFrame("About");
about.setSize(300, 300);
JButton picture = new JButton(new ImageIcon("C:/Users/TehRobot/Desktop/Logo.png"));
about.add(picture);
about.setVisible(true);
}

if (e.getActionCommand().equals("Empty Rect"))
{
System.out.println("Empty Rectangle Has Been Selected~");
choice = 1;

}

if (e.getActionCommand().equals("Empty oval"))
{
System.out.println("Empty Oval Has Been Selected!");
choice = 2;
}


if (e.getActionCommand().equals("Filled Rect"))
{
System.out.println("Filled Rectangle Has Been Selected");
choice = 3;
}


if (e.getActionCommand().equals("Filled oval"))
{
System.out.println("Filled Oval Has Been Selected");
choice = 4;
}


if (e.getActionCommand().equals("Line"))
{
System.out.println("Draw Line Has Been Selected");
choice = 5;
}

if (e.getActionCommand().equals("Thin Line"))
{
stroke = 0;
}

if (e.getActionCommand().equals("Medium Line"))
{
stroke = 1;
}

if (e.getActionCommand().equals("Thick Line"))
{
stroke = 2;
}

if(e.getActionCommand().equals("Erase?"))
{
eraser = 1;
choice = 7;
}

if (e.getActionCommand().equals("Clear"))
{
System.out.println("Clear All The Things!!!");
choice = 6;
draw();
}


}

public void mouseExited(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mousePressed(MouseEvent evt)
{

xX1 = evt.getX();
yY1= evt.getY();



}
public void mouseReleased(MouseEvent evt)
{
xX2 =evt.getX();
yY2=evt.getY();
draw();
eraser = 0;
}

最佳答案

我会使用 ActionListener 并将事件注册到您的按钮,例如:

  yourButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{// your logic here;
}});

这里还有一个很好的链接,可以了解事件监听器的工作原理 http://download.oracle.com/javase/tutorial/uiswing/events/index.html您尝试处理事件的方式使您的代码难以阅读和维护。

关于java - JButtons 和 ActionListeners 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com