Hallo zusammen!
es ist schon sehr spät und ich komme grad einfach nicht mehr weiter...
Da ich noch nicht sehr bewandert im programmieren bin, werde ich jetzt mal ausführlich schreiben, was ich gemacht habe, weil ich keine Ahnung habe ob ich es so richtig gemacht habe oder nicht, bzw. was wichtig ist oder nicht.
ich habe mir eine eigene Klasse geschrieben, die einen Pfeil zeichnet (Array). dann habe ich im selben Projekt eine neue Klasse erstellt, die in einem Panel von einem Bild ausgefüllt wird, in einem anderen Panel Slider.
In die Pfeil-Klasse habe ich Methoden eingebunden, die den Ort, die Länge und die Farbe des Pfeils ändern können. Im fertigen Programm möchte ich einen Pfeil (Vektor) auf dem Bild haben den ich dann verschieben kann.
In der Hauptklasse habe ich also einen vectorT vom Typ Array initialisiert und lasse den über eine Paint-Funktion zeichnen.
Das Problem ist nur, dass ich den Pfeil nur so lange sehe, solange ich die Größe des Fensters ändere (manuell mit der Maus meine ich jetzt). Wenn ich die Maustaste loslasse, dann wird der Vektorpfeil von meinem Bild überzeichnet. Ich habe dann versucht in die paint-funktion einen repaint() einzubauen, aber das funktioniert nicht. Ich poste jetzt mal den gesamten Code, vll. ist für irgendjemanden der Fehler ja offensichtlich...
Über Hilfe wäre ich sehr dankbar,
tut mir Leid, wenn ich mich blöd angestellt haben sollte!
Vielen Dank für eure Zeit,
lg Fabi
PS: darf man Klassen ohne import so einfach übernehmen, oder muss man da was machen?
PPS: kann ich den Pfeil auch irgendwie nur in ein Panel zeichnen?
es ist schon sehr spät und ich komme grad einfach nicht mehr weiter...
Da ich noch nicht sehr bewandert im programmieren bin, werde ich jetzt mal ausführlich schreiben, was ich gemacht habe, weil ich keine Ahnung habe ob ich es so richtig gemacht habe oder nicht, bzw. was wichtig ist oder nicht.
ich habe mir eine eigene Klasse geschrieben, die einen Pfeil zeichnet (Array). dann habe ich im selben Projekt eine neue Klasse erstellt, die in einem Panel von einem Bild ausgefüllt wird, in einem anderen Panel Slider.
In die Pfeil-Klasse habe ich Methoden eingebunden, die den Ort, die Länge und die Farbe des Pfeils ändern können. Im fertigen Programm möchte ich einen Pfeil (Vektor) auf dem Bild haben den ich dann verschieben kann.
In der Hauptklasse habe ich also einen vectorT vom Typ Array initialisiert und lasse den über eine Paint-Funktion zeichnen.
Das Problem ist nur, dass ich den Pfeil nur so lange sehe, solange ich die Größe des Fensters ändere (manuell mit der Maus meine ich jetzt). Wenn ich die Maustaste loslasse, dann wird der Vektorpfeil von meinem Bild überzeichnet. Ich habe dann versucht in die paint-funktion einen repaint() einzubauen, aber das funktioniert nicht. Ich poste jetzt mal den gesamten Code, vll. ist für irgendjemanden der Fehler ja offensichtlich...
Code:
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.*;
public class Tutoraufgabe extends JFrame implements ChangeListener //,ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
//Vektoren
Arrow vectorT = new Arrow(100, 100, 10);
//EinstellungsPanel
JPanel settingsPanel = new JPanel(); //Panel für alle Einstellungen
//Ebene 1 Panel
//BorderLayout.EAST
//SchlepperPanel
JPanel tractorPanel = new JPanel(); //Panel für alle Einstellungen des Traktors
//Ebene 2 Panel
JLabel mlabelT = new JLabel("Traktor:");
JPanel wheightPanelT = new JPanel(); //Panel für das Gewicht des Traktors
//Ebene 3 Panel
JLabel wLabelT = new JLabel("Gewicht eingeben:");
JTextField wTextT = new JTextField(7); //Eingabefeld Gewicht
int weightT; //Gewicht des Schleppers
JPanel positionPanelT = new JPanel(); //Panel für die Position des Schwerpunkts des Traktors
//Ebene 3 Panel
JLabel pLabelT = new JLabel("Position einstellen:");
JTextField outTextT = new JTextField(3); //Anzeige des Sliders
JSlider pSliderT = new JSlider //Slider für die Position des Schwerpunkts des Traktors
( SwingConstants.HORIZONTAL, 0, 100, 50 );
int positionT = 50; //Position des Schwerpunkts des Traktors
//HeckladerPanel
JPanel loaderPanel = new JPanel(); //Panel für alle Einstellungen der Ladevorrichtung
//Ebene 2 Panel
JLabel mlabelL = new JLabel("Ladevorrichtung:");
JPanel wheightPanelL = new JPanel(); //Panel für das Gewicht der Ladevorrichtung
//Ebene 3 Panel
JLabel wLabelL = new JLabel("Gewicht eingeben:");
JTextField wTextL = new JTextField(7); //Eingabefeld Gewicht
int weightL; //Gewicht der Ladevorrichtung
JPanel positionPanelL = new JPanel(); //Panel für die Position des Schwerpunkts der Ladevorrichtung
//Ebene 3 Panel
JLabel pLabelL = new JLabel("Position einstellen:");
JTextField outTextL = new JTextField(3); //Anzeige des Sliders
JSlider pSliderL = new JSlider //Slider für die Position des Schwerpunkts der Ladevorrichtung
( SwingConstants.HORIZONTAL, 0, 100, 50 );
int positionL = 50; //Position des Schwerpunkts der Ladevorrichtung
//GewichtPanel
JPanel matterPanel = new JPanel(); //Panel für alle Einstellungen des Materials
//Ebene 2 Panel
JLabel mlabelM = new JLabel("Ladevorrichtung:");
JPanel wheightPanelM = new JPanel(); //Panel für das Gewicht des Materials
//Ebene 3 Panel
JLabel wLabelM = new JLabel("Gewicht eingeben:");
JTextField wTextM = new JTextField(7); //Eingabefeld Gewicht
int weightM; //Gewicht des Materials
JPanel positionPanelM = new JPanel(); //Panel für die Position des Schwerpunkts des Materials
//Ebene 3 Panel
JLabel pLabelM = new JLabel("Position einstellen:");
JTextField outTextM = new JTextField(3); //Anzeige des Materials
JSlider pSliderM = new JSlider //Slider für die Position des Schwerpunkts des Materials
( SwingConstants.HORIZONTAL, 0, 100, 50 );
int positionM = 50;
//PicturePanel
JPanel picturePanel = new JPanel(); //Panel für das Bild des Traktors
JLabel pic = new JLabel(new ImageIcon("Traktor nur.jpg"));
public Tutoraufgabe()
{
setTitle( "Tutoraufgabe 1: Traktor" );
setDefaultCloseOperation( EXIT_ON_CLOSE );
pSliderT.setName("positionTractor"); //Slider für die Position des Schwerpunkts des Traktors
pSliderT.setMajorTickSpacing(10); //initialisieren
pSliderT.setMinorTickSpacing(2);
pSliderT.setPaintTicks(true);
pSliderT.setPaintLabels(true);
pSliderT.setPreferredSize( new Dimension(250, 50));
pSliderT.addChangeListener( this );
wheightPanelT.add(wLabelT); //Panel für das Gewicht des Traktors initialisieren
wheightPanelT.add(wTextT);
positionPanelT.add(pLabelT); //Panel für die Position des Schwerpunkts des Traktors
positionPanelT.add(outTextT); //initialisieren
positionPanelT.add(pSliderT);
// vll noch eine Anzeige des aktuellen Werts einfügen
tractorPanel.add(mlabelT); //Panel 3. Ebene der 2. Ebene zufügen
tractorPanel.add(wheightPanelT);
tractorPanel.add(positionPanelT);
tractorPanel.setLayout(new BoxLayout(tractorPanel, BoxLayout.Y_AXIS));
loaderPanel.setBackground( Color.blue );
settingsPanel.add(tractorPanel); //Panel 2. Ebene der 1. Ebene zufügen
settingsPanel.add(loaderPanel);
settingsPanel.add(matterPanel);
settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.Y_AXIS));
getContentPane().setBackground( Color.blue ); //ContentPane einrichten
getContentPane().setLayout( new BorderLayout() );
getContentPane().add(settingsPanel, BorderLayout.EAST);
getContentPane().add(pic, BorderLayout.CENTER);
// vectorT.changePlace(100, 200); //Vektoren initialisieren
// vectorT.changeLength(100);
// vectorT.changeColor(Color.red);
// vectorT.draw();
//Gewicht Hecklader
//Gewicht Last
//listener method
}
public void paint ( Graphics gr )
{
setBackground(Color.black);
vectorT.changePlace(100, 200);
vectorT.changeLength(100);
vectorT.changeColor(Color.red);
vectorT.draw( gr );
}
public void stateChanged( ChangeEvent evt)
{
JSlider source;
source = (JSlider)evt.getSource();
if (source.getName().equals("positionTractor"))
{
outTextT.setText( source.getValue() + " ");
positionT = source.getValue();
repaint();
}
//andere Slider einfügen, vll auch mit switch/case
}
public static void main( String[] args)
{
Tutoraufgabe traktor = new Tutoraufgabe() ;
//
// WindowQuitter wquit = new WindowQuitter();
// traktor.addWindowListener( wquit );
//
traktor.setSize( 200, 150 );
traktor.setVisible( true );
}
public void actionPerformed( ActionEvent evt)
{
repaint();
}
}
class WindowQuitter extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
Über Hilfe wäre ich sehr dankbar,
tut mir Leid, wenn ich mich blöd angestellt haben sollte!
Vielen Dank für eure Zeit,
lg Fabi
PS: darf man Klassen ohne import so einfach übernehmen, oder muss man da was machen?
PPS: kann ich den Pfeil auch irgendwie nur in ein Panel zeichnen?