Linie zeichnen per Knopfdruck --> Fehler

Status
Nicht offen für weitere Antworten.

Addict

Mitglied
Hi

Ich möchte eine Funktion, die eine Linie zeichnet erstellen. (Soll später ein Liniendiagramm werden....)
Die Funktion (zeichnen) ist nicht schwer, aber wie rufe ich nun diese auf? Ich habe es mit zeichnen( g ) und zeichnen (Graphics g) versucht, aber es kommt immer die Fehlermeldung: [57.1] cannot resolve symbol

Code:
/*
 * einstellungen.java
 *
 * Created on 11. August 2004, 19:41
 */

/**
 *
 * @author  Marco Bigolin
 */
import java.awt.Graphics;
public class einstellungen extends javax.swing.JFrame {
    
    public void zeichnen(Graphics g)
    {
        g.drawLine(100,200,800,900);
    }
    /** Creates new form einstellungen */
    public einstellungen() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        buttonGroup1 = new javax.swing.ButtonGroup();
        jCheckBox1 = new javax.swing.JCheckBox();
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jCheckBox1.setText("jCheckBox1");
        getContentPane().add(jCheckBox1, new org.netbeans.lib.awtextra.AbsoluteConstraints(60, 20, 250, 140));

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 200, -1, -1));

        pack();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
zeichnen (g);    // TODO add your handling code here:
    }
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new einstellungen().show();
    }
    
    // Variables declaration - do not modify
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButton1;
    private javax.swing.JCheckBox jCheckBox1;
    // End of variables declaration
    
}
Kann mir jemand sagen wie dies funktioniert? Oder gibt es bereits eine Diagramm funktion (Ich brauche Linien und Balken Diagramm.....)
 
Hmm also deinem Code nach ist der von irgendeinem GUI Editor generiert und es herrscht da ein wenig Chaos..
Wenn du jetzt wirklich eine Linie auf Knopfdruck Zeichnen willst würd ich in des Frame einen Button einbauen und ein JPanel auf dessen Graphics du dann zeichnest
 
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Linie extends JFrame {

	Linie() {
		
		setSize(300, 300);
		Container c = getContentPane();
		c.setLayout(new BorderLayout());
		JButton test = new JButton("Zeichne Linie");
		final JPanel malen = new JPanel();
		c.add(test, BorderLayout.SOUTH);
		c.add(malen, BorderLayout.CENTER);
		test.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				malen.getGraphics().drawLine(10, 10, 50, 50);
			}
		});
		setVisible(true);
	
	}
		
	
	public static void main(String[] args) {
	    new Linie();	
	}
}
 
Da muss ich glatt auch eine Version beisteuern:

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main extends JComponent{
	private Vector lines = new Vector();
	
	public static void main( String[] args ){
		JFrame frame = new JFrame();
		Container content = frame.getContentPane();
		
		JButton button = new JButton( "add" );
		final Main main = new Main();
		
		content.add( main, BorderLayout.CENTER );
		content.add( button, BorderLayout.SOUTH );
		
		button.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent e ){
				main.newLine();
			}
		});
		
		frame.setBounds( 20, 20, 500, 500 );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
	}
	public void newLine(){
		lines.add( new Line( Math.random(), Math.random(), Math.random(), Math.random() ) );
		repaint();
	}
	
	public void paintComponent( Graphics g ){
		g.setColor( Color.BLACK );
		
		int w = getWidth();
		int h = getHeight();
		
		g.fillRect( 0, 0, w, h );
		
		g.setColor( Color.GREEN );
		
		for( int i = 0; i < lines.size(); i++ )
			((Line)lines.get( i )).paint( g, w, h );
	}
}

Code:
public class Line{
	private double x1, x2, y1, y2;
	
	public Line( double x1, double y1, double x2, double y2 ){
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
	}
	
	public void paint( Graphics g, int width, int height ){
		g.drawLine( (int)(x1 * width), (int)(y1 * height), (int)(x2 * width), (int)(y2 * height));
	}
}

Diese Variante nutzt die Methode "paintComponent" aus, welche immer dann aufgerufen wird, falls das Frame neu gezeichnet werden soll (z.B. weil es verdeckt war).

mfg Beni
 
Ok vielen Dank!
Nun aber noch eine letze Frage zu diesem Thema....
Wie kann diese Linie in ein JScrollPane zeichnen??? Hat noch jemand ein Beispiel dazu?
Wie kann ich dann den Inhalt des JScrollPane ausdrucken? (Ein Beispiel wäre auch da sehr hilfreich....)

Vielen Dank für die schnelle Antworten!!!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben