2014-03-14 2 views
-1

Я пробовал этот метод и несколько других, но никто, кажется, не работает, он говорит: «Ошибка: не удалось найти или загрузить главный класс 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); 
} 
} 

Я хотел бы это так, что, когда я нажимаю изображение кнопки изменения изображения в цикле

Благодаря

+0

Как вы пытаетесь запустить этот код? (Аргументы командной строки, IDE, ...?) Что показывает вам сообщение об ошибке (и есть ли еще сообщение об ошибке)? – EthanB

+0

im using eclipse – user3116196

+0

Хорошо! (Мой любимый.) Не могли бы вы разместить свой путь сборки и/или скриншоты ошибки? Какие нажатия клавиш/нажатия кнопок вы пытаетесь сделать, чтобы это привело к ошибке? – EthanB

ответ

0

Я побежал ваш код и я могу увидеть результат, как показано ниже. Не было ошибок.

Попробуйте перезагрузить рабочее пространство или новое рабочее пространство в затмении.

enter image description here

0

В этом примере программа позволит вам нарисовать линию с помощью мыши. Вы рисуете линию, удерживая левую кнопку мыши.

Этот пример иллюстрирует правильный способ использования JPanel в качестве рисованной панели и правильный способ создания JFrame.

Как правило, все эти классы будут находиться в разных файлах .java. Я собрал их вместе, чтобы было легче вставить код в этот ответ.

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.event.MouseInputAdapter; 

public class DrawingTest implements Runnable { 

    private JFrame frame; 

    private MyDrawPanel drawPanel; 

    private List<Point> points; 

    public DrawingTest() { 
     points = new ArrayList<Point>(); 
    } 

    @Override 
    public void run() { 
     frame = new JFrame("Bouncing Vertices"); 

     drawPanel = new MyDrawPanel(this); 
     MyListener alpha = new MyListener(this); 
     drawPanel.addMouseMotionListener(alpha); 
     drawPanel.addMouseListener(alpha); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(drawPanel); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
    } 

    public JPanel getDrawingPanel() { 
     return drawPanel; 
    } 

    public List<Point> getPoints() { 
     return points; 
    } 

    public void setPoint(int x, int y) { 
     points.add(new Point(x, y)); 
    } 

    public void resetPoints() { 
     points.clear(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new DrawingTest()); 
    } 

    private class MyListener extends MouseInputAdapter { 

     private DrawingTest drawingTest; 

     public MyListener(DrawingTest drawingTest) { 
      this.drawingTest = drawingTest; 
     } 

     @Override 
     public void mouseDragged(MouseEvent event) { 
      drawingTest.setPoint(event.getX(), event.getY()); 
      drawingTest.getDrawingPanel().repaint(); 
     } 

     @Override 
     public void mouseReleased(MouseEvent event) { 
      drawingTest.resetPoints(); 
     } 

    } 

    private class MyDrawPanel extends JPanel { 

     private static final long serialVersionUID = 1L; 
     private DrawingTest drawingTest; 

     public MyDrawPanel(DrawingTest drawingTest) { 
      this.drawingTest = drawingTest; 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.BLUE); 
      for (int i = 1; i < drawingTest.getPoints().size(); i++) { 
       Point p1 = drawingTest.getPoints().get(i - 1); 
       Point p2 = drawingTest.getPoints().get(i); 
       g.drawLine(p1.x, p1.y, p2.x, p2.y); 
      } 
     } 
    } 

} 
Смежные вопросы