Я пробовал этот метод и несколько других, но никто, кажется, не работает, он говорит: «Ошибка: не удалось найти или загрузить главный класс Main» по какой-то странной причине.Как рисовать изображение в JPanel?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Main {
public static void main(String[]args){
Gui g = new Gui();
g.setVisible(true);
}
}
@SuppressWarnings("serial")
class Gui extends JFrame{
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
double width = screen.getWidth();
double height = screen.getHeight();
JFrame frame = this;
Color c = Color.red;
boolean clear = false;
Gui(){
super("PaintPot");
setSize((int)width/4,(int)height/2);
setVisible(true);
setResizable(false);
setLayout(null);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas c = new canvas(this,clear);
c.setVisible(true);
}
}
@SuppressWarnings("serial")
class canvas extends JPanel{
Image back = Toolkit.getDefaultToolkit().createImage("cat.png");
int bwidth = 1;
JButton image = new JButton("Image");
JButton br = new JButton("Red");
JButton bb = new JButton("Blue");
JButton bg = new JButton("Green");
public JSlider s = new JSlider();
JLabel brushwidth = new JLabel("Width = ",JLabel.CENTER);
Color colour = Color.red;
boolean entered = false;
Point p = null;
boolean clear = false;
JButton wipe = new JButton("Wipe");
canvas(JFrame f,boolean g){
bwidth = s.getValue();
setSize(425,350);
setLocation(10,50);
setVisible(true);
setBorder(BorderFactory.createLineBorder(Color.black,4));
f.add(bb);
bb.setSize(60,30);
bb.setLocation(80, 10);
bb.setBackground(Color.blue);
bb.setForeground(Color.white);
bb.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
colour = Color.blue;
}
});
bb.setVisible(true);
f.add(image);
image.setSize(70,30);
image.setLocation(230, 10);
image.setBackground(Color.gray);
image.setForeground(Color.orange);
image.setVisible(true);
f.add(brushwidth);
brushwidth.setSize(70,30);
brushwidth.setLocation(90,410);
brushwidth.setBackground(Color.gray);
brushwidth.setForeground(Color.orange);
brushwidth.setOpaque(true);
brushwidth.setVisible(true);
f.add(s);
s.setSize(getWidth()-20, 20);
s.setLocation(10, 450);
s.setBackground(Color.gray);
s.setForeground(Color.orange);
s.setMajorTickSpacing(50);
s.setMinorTickSpacing(1);
s.setValue((int)bwidth);
s.addChangeListener(new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
bwidth = s.getValue();
brushwidth.setText("Width = "+s.getValue());
}
});
brushwidth.setText("Width = "+s.getValue());
f.add(wipe);
wipe.setSize(70,30);
wipe.setLocation(10, 410);
wipe.setBackground(Color.gray);
wipe.setForeground(Color.orange);
wipe.setVisible(true);
wipe.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
repaint();
}});
f.add(br);
br.setSize(60,30);
br.setLocation(10, 10);
br.setBackground(Color.red);
br.setForeground(Color.white);
br.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
colour = Color.red;
}
});
br.setVisible(true);
f.add(bg);
bg.setSize(70,30);
bg.setLocation(150, 10);
bg.setBackground(Color.green);
bg.setForeground(Color.white);
bg.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
colour = Color.green;
}
});
br.setVisible(true);
addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent arg0) {
if(entered == true){
p = arg0.getPoint();
circ(getGraphics(),p,bwidth,colour);
}
}
@Override
public void mouseEntered(MouseEvent arg0) {entered = true;}
@Override
public void mouseExited(MouseEvent arg0) {entered = false;}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
addMouseMotionListener(new MouseAdapter(){
public void mouseDragged(MouseEvent e){
if(entered == true){
p = e.getPoint();
paint(getGraphics(),p,bwidth,colour);
}
}
});
f.add(this);
repaint();
back(getGraphics(),this,back);
}
public void paint(Graphics g,Point p,int w,Color colour){
g.setColor(colour);
g.drawOval(p.x-(w/2), p.y-(w/2), w, w);
g.fillOval(p.x-(w/2), p.y-(w/2), w, w);
}
public void circ(Graphics g,Point p,int w,Color colour){
g.setColor(colour);
g.drawOval(p.x-(w/2), p.y-(w/2), w, w);
g.fillOval(p.x-(w/2), p.y-(w/2), w, w);
}
public void back(Graphics g,JPanel p,Image i){
super.paint(g);
g.drawImage(i, 0, 0, p);
}
}
Я хотел бы это так, что, когда я нажимаю изображение кнопки изменения изображения в цикле
Благодаря
Как вы пытаетесь запустить этот код? (Аргументы командной строки, IDE, ...?) Что показывает вам сообщение об ошибке (и есть ли еще сообщение об ошибке)? – EthanB
im using eclipse – user3116196
Хорошо! (Мой любимый.) Не могли бы вы разместить свой путь сборки и/или скриншоты ошибки? Какие нажатия клавиш/нажатия кнопок вы пытаетесь сделать, чтобы это привело к ошибке? – EthanB