Hängt davon ab wieviel Euro Dir das Wert ist ;-)Aber eine Andere möglichkeit gibt es nicht, oder?
Gegenfrage: wozu brauchst Du ein eigenes Malprogramm bzw. wieso möchtest Du eins schreiben? Und wie sind deine jetzigen Kenntnisse in Sachen Programmierung überhaupt?Danke für die schnelle Antwort, doch mit diesen Tuturials komme ich nicht weiter, denn ich verstehe die hälfte davon nicht -__-
Vielleicht noch einen anderen Vorschlag um mir zu helfen?
PANEL.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
d.h. Du willst lernen und das bedeutet auch, Du musst dich ransetzen und versuchen auch komplizierte Sachen zu verstehen. Gleich am Anfang versteht man nicht alles, aber das bedeutet nicht, dass man es sofort hinschmeißt. Man muss lesen und versuchen das zu verstehen, was geht. Danach üben und/oder experimentieren. Dann wieder von Vorne lesen. Nach 3-5 Mal wird es klarer und man versteht viel mehr. Wenn Englisch ein Problem ist, es gibt auch genug Tutorials auf Deutsch, hier z.B.:Also ich mache Java jetzt ungefähr ein dreiviertel Jahr und ich habe schon einen Taschenrechner, eine Art Notizbuch, ein Tabellenprogramm und einen Kalender geschrieben.
Ich möchte gerne ein eigenes Malprogramm schreiben damit ich mehr erfarungen sammel kann.
(Mal so ne Frage die hier garnicht reingehört, ab wie vielen jahren darf man hier angemeldet sein?? nur aus reiner Interesse???)
Aha ist ja cool
Oh nein! Was rätst du ihm hier nur für einen Unsinn!? JPanel und Canvas... Sowas macht man einfach nicht.Würde dir denn ein JPanel mit einem MouseListener reichen? Du könntest dessen Undurchsichtigkeit mit .setOpaque(false) ausschalten und darunter nen Canvas in gleicher Größe legen.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
* Einfaches Polygone Spiel: klicken Sie mit der Linken Maus auf
* die weiße fläche. Es fängt an sich nach und nach ein Polygone
* aufzubauen. Drücken Sie STRG+Linke Maustaste, so wird ein neues
* Polygone angefangen (aber die alten werden beibehalten).
*
* @author Tomate_Salat
*/
public class PolygonExampel
{
private JFrame frame;
private Polygon currentPolygone;
private List<Polygon> polygone;
private JComponent painter;
public PolygonExampel()
{
frame = new JFrame("Polygone Excampel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
polygone = new ArrayList<Polygon>();
init();
}
private void init()
{
getNewPolygone();
painter = new JComponent()
{
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g)
{
// Hier würde normalerweise erst super.paintComponent aufgerufen
// werden, damit System seine Arbeit machen kann, in unserem
// Falle ist dies aber eher störend
// super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create(); // Niemals g direkt verwenden!!!
// Hintergrund weis zeichnen
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
// Polygone zeichnen
for(Polygon poly : polygone)
{
g2d.setColor(new Color(0,0,0,100));
g2d.fillPolygon(poly);
g2d.setColor(Color.BLUE);
g2d.drawPolygon(poly);
}
g2d.dispose(); // Ressourcen wieder freigeben!!!
}
};
painter.setOpaque(true);
painter.setPreferredSize(new Dimension(300, 300));
painter.setSize( painter.getPreferredSize() );
painter.addMouseListener(new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
Point p = e.getPoint();
if(!e.isPopupTrigger() && !e.isControlDown())
{
currentPolygone.addPoint(p.x, p.y);
painter.repaint();
}
else if(!e.isPopupTrigger() && e.isControlDown())
{
getNewPolygone();
currentPolygone.addPoint(p.x, p.y);
}
}
});
frame.add(painter);
}
private void getNewPolygone()
{
currentPolygone = new Polygon();
polygone.add( currentPolygone );
}
public void open()
{
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new PolygonExampel().open();
}
});
}
}
if(rechteckButton.isSelected()){
g.drawRect(...)
}
else if(kreisButton.isSelected()){
g.drawOval(....)
}
ja, stimmt man sollte auch nur im Listener nachdem man den punkt gezeichnet hat repainten...Sorry, aber was du da vorschlägst hört sich nicht gut an! Sowas nennt man "busy waiting" und ist total unperformant. Du brauchst so eine ständige Überprüfung doch gar nicht, eben weil wir mit Swing/AWT den EDT mit den Events haben. Wenn der User irgendwas mit der Maus tut, dann registiert das ja ein entsprechender Listener, und direkt in der Listener-Methode machst du entsprechende Änderungen an deinen Daten und rufst dann ein repaint() auf.
Solange sich im Programm nix tut müssen wir auch nix machen. Ein Thread der da ständig läuft ist unangemessen dafür!
Titel | Forum | Antworten | Datum | |
---|---|---|---|---|
K | Zeichenprogramm mit "nachmalfunktion" | Allgemeine Java-Themen | 8 | |
D | Gui-Zeichenprogramm | Allgemeine Java-Themen | 14 | |
T | Zeichenprogramm | Allgemeine Java-Themen | 2 |