2016-05-20 8 views
-1

Also habe ich meine erste nützliche App erstellt - ein Mal- und Zeichenwerkzeug, aber ... Es kann nicht ausgeführt werden (gestartet). Ich weiß nicht, ist das Problem in meinem Computer oder im Code ... Hier ist der Code:Mein Java Swing-Zeichenwerkzeug kann nicht ausgeführt werden

package MaddpawNightpainter; 

    import java.awt.BorderLayout; 
    import java.awt.Container; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 

    public class Nightpainter2 { 

     JButton clearBtn, blackBtn, blueBtn, greenBtn, redBtn, magentaBtn; 
     Nightpainter drawArea; 
     ActionListener actionListener = new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == clearBtn) { 
      drawArea.clear(); 
      } else if (e.getSource() == blackBtn) { 
      drawArea.black(); 
      } else if (e.getSource() == blueBtn) { 
      drawArea.blue(); 
      } else if (e.getSource() == greenBtn) { 
      drawArea.green(); 
      } else if (e.getSource() == redBtn) { 
      drawArea.red(); 
      } else if (e.getSource() == magentaBtn) { 
      drawArea.magenta(); 
      } 
     } 
     }; 

     public static void main(String[] args) { 
     new Nightpainter().show(); 
     } 


    public void show() { 
    // create main frame 
    JFrame frame = new JFrame("Nightpainter 1.0"); 
    Container content = frame.getContentPane(); 
    // set layout on content pane 
    content.setLayout(new BorderLayout()); 
    // create draw area 
    drawArea = new Nightpainter(); 

    // add to content pane 
    content.add(drawArea, BorderLayout.CENTER); 

    // create controls to apply colors and call clear feature 
    JPanel controls = new JPanel(); 

    clearBtn = new JButton("Clear"); 
    clearBtn.addActionListener(actionListener); 
    blackBtn = new JButton("Black"); 
    blackBtn.addActionListener(actionListener); 
    blueBtn = new JButton("Blue"); 
    blueBtn.addActionListener(actionListener); 
    greenBtn = new JButton("Green"); 
    greenBtn.addActionListener(actionListener); 
    redBtn = new JButton("Red"); 
    redBtn.addActionListener(actionListener); 
    magentaBtn = new JButton("Magenta"); 
    magentaBtn.addActionListener(actionListener); 

    // add to panel 
    controls.add(greenBtn); 
    controls.add(blueBtn); 
    controls.add(blackBtn); 
    controls.add(redBtn); 
    controls.add(magentaBtn); 
    controls.add(clearBtn); 

    // add to content pane 
    content.add(controls, BorderLayout.NORTH); 

    frame.setSize(500, 600); 
    // can close frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    // show the swing paint result 
    frame.setVisible(true); 

    // :) 
    } 

} 

Und die andere Datei:

package MaddpawNightpainter; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 

import javax.swing.JComponent; 

/* 

Author: Bogdan Ganev 

Title: Maddpaw Nightpainter 

Description: Nightpainter is a drawing tool, part of Maddpaw - Multifunctional App for Designers, 
Developers And Writers 

Copyright: Copyright (C) 2016 Bogdan Ganev. All rights reserved. Maddpaw, Multifunctional App for Designers, 
Developers And Writers is a trademark of Bogdan Ganev. Java TM is a trademark of Oracle Corporation (R) 

*/ 
public class Nightpainter extends JComponent { 

    // Image in which we're going to draw 
    private Image image; 
    // Graphics2D object ==> used to draw on 
    private Graphics2D g2; 
    // Mouse coordinates 
    private int currentX, currentY, oldX, oldY; 

    public Nightpainter() { 
    setDoubleBuffered(false); 
    addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent e) { 
     // save coord x,y when mouse is pressed 
     oldX = e.getX(); 
     oldY = e.getY(); 
     } 
    }); 

    addMouseMotionListener(new MouseMotionAdapter() { 
     public void mouseDragged(MouseEvent e) { 
     // coord x,y when drag mouse 
     currentX = e.getX(); 
     currentY = e.getY(); 

     if (g2 != null) { 
      // draw line if g2 context not null 
      g2.drawLine(oldX, oldY, currentX, currentY); 
      // refresh draw area to repaint 
      repaint(); 
      // store current coords x,y as olds x,y 
      oldX = currentX; 
      oldY = currentY; 
     } 
     } 
    }); 
    } 

    protected void paintComponent(Graphics g) { 
    if (image == null) { 
     // image to draw null ==> we create 
     image = createImage(getSize().width, getSize().height); 
     g2 = (Graphics2D) image.getGraphics(); 
     // enable antialiasing 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     // clear draw area 
     clear(); 
    } 

    g.drawImage(image, 0, 0, null); 
    } 

    // now we create exposed methods 
    public void clear() { 
    g2.setPaint(Color.white); 
    // draw white on entire draw area to clear 
    g2.fillRect(0, 0, getSize().width, getSize().height); 
    g2.setPaint(Color.black); 
    repaint(); 
    } 

    public void red() { 
    // apply red color on g2 context 
    g2.setPaint(Color.red); 
    } 

    public void black() { 
    g2.setPaint(Color.black); 
    } 

    public void magenta() { 
    g2.setPaint(Color.magenta); 
    } 

    public void green() { 
    g2.setPaint(Color.green); 
    } 

    public void blue() { 
    g2.setPaint(Color.blue); 
    } 

} 

So ist das Problem in meinem Computer oder im Code? By the way, ist es 10,3 KB ...

+2

"Kann nicht ausgeführt werden" wie? Wie versuchen Sie, es auszuführen, und erhalten Sie irgendwelche Ausnahmen oder Fehlermeldungen? –

+0

Sie benötigen eine Top-Level-Komponente 'JFrame' oder' JDialog', um Ihre Komponente zu platzieren. Sehen Sie mehr Swing-Tutorials –

Antwort

1

Ändern Sie den Code in der Klasse NightPainter2 dazu:

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Nightpainter2 { 

    static JButton clearBtn, blackBtn, blueBtn, greenBtn, redBtn, magentaBtn; 
    static Nightpainter drawArea; 
    static ActionListener actionListener = new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == clearBtn) { 
     drawArea.clear(); 
     } else if (e.getSource() == blackBtn) { 
     drawArea.black(); 
     } else if (e.getSource() == blueBtn) { 
     drawArea.blue(); 
     } else if (e.getSource() == greenBtn) { 
     drawArea.green(); 
     } else if (e.getSource() == redBtn) { 
     drawArea.red(); 
     } else if (e.getSource() == magentaBtn) { 
     drawArea.magenta(); 
     } 
    } 
    }; 

    public static void main(String[] args) { 
    // create main frame 
     JFrame frame = new JFrame("Nightpainter 1.0"); 
     // set layout on content pane 
     frame.setLayout(new BorderLayout()); 
     // create draw area 
     drawArea = new Nightpainter(); 

     // add to content pane 
     frame.add(drawArea, BorderLayout.CENTER); 

     // create controls to apply colors and call clear feature 
     JPanel controls = new JPanel(); 

     clearBtn = new JButton("Clear"); 
     clearBtn.addActionListener(actionListener); 
     blackBtn = new JButton("Black"); 
     blackBtn.addActionListener(actionListener); 
     blueBtn = new JButton("Blue"); 
     blueBtn.addActionListener(actionListener); 
     greenBtn = new JButton("Green"); 
     greenBtn.addActionListener(actionListener); 
     redBtn = new JButton("Red"); 
     redBtn.addActionListener(actionListener); 
     magentaBtn = new JButton("Magenta"); 
     magentaBtn.addActionListener(actionListener); 

     // add to panel 
     controls.add(greenBtn); 
     controls.add(blueBtn); 
     controls.add(blackBtn); 
     controls.add(redBtn); 
     controls.add(magentaBtn); 
     controls.add(clearBtn); 

     // add to content pane 
     frame.add(controls, BorderLayout.NORTH); 

     frame.setSize(500, 600); 
     // can close frame 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // show the swing paint result 
     frame.setVisible(true); 

     // :) 
    } 

Ich weiß nicht, warum es funktioniert, ich sah nur eine Linie, die durch ‚Show 'in neuem NightPainter2.show(); Also habe ich das versucht. Ich habe nicht erwartet, dass es funktioniert, ehrlich :)

Und Sie möchten vielleicht hinzufügen frame.setLocationRelativeTo (null); um es in der Mitte des Bildschirms zu öffnen.

+0

Es hat funktioniert! Vielen Dank! – MrColdfish

+0

Können Sie es bitte als die beste Antwort wählen? Ich habe gerade angefangen und brauche den Ruf :) Es ist das Mindeste, was Sie tun können :) – that2guy

+1

Der Grund, warum diese Änderung funktioniert, ist, weil der JFrame, den Sie erstellt haben, eine lokale Variable für die Methode show() war zurückgegeben der JFrame würde Müll gesammelt werden. Dieses Neuschreiben hält den JFrame am Leben, da er nicht aus dem Geltungsbereich verschwindet, bis main() zurückkehrt. – Jere

Verwandte Themen