Ich habe jetzt schon öfters gelesen dass ich nicht mehrere Sachen erben kann. Allerdings muss ich für mein Programm JFrame und Canvas erben. Kann ich das irgendwie umgehen? - vielleicht über implements oder so?
Danke für eure Antworten!!
Ich bezweifle dass du wirklich von beidem erben musst.
Man erbt immer nur dann von einer Klasse wenn man dessen Funktionalität erweitern will. Ansonsten reicht es aus eine Instanz dieser Klasse anzulegen.
Was willst du denn erreichen?
public void bt_zeichnen_ActionPerformed(ActionEvent evt) {
if (button == false) {
button = true;
} // end of if
repaint();
} // end of bt_zeichnen_ActionPerformed
public void paint(Graphics g){
super.paint(g);
if (button) {
g.drawLine(100,13,23,400)
} // end of if
}
Reicht das an Quellcode oder willst du noch was sehen?
Das einzige was ich eigentlich möchte ist, dass die gezeichnete Linie innerhalb von dem Canvas gezeichnet wird und nicht quer über meine ganze GUI.
Ja, warum musst du aber von JFrame erben?
Du willst doch ein normales JFrame verwenden um das Canvas anzuzeigen, dann erstell einfach ein Objekt von JFrame (ableiten musst du dazu nicht).
Ich nehme an deine Klasse Versuch1 erbt von JFrame, du überschreibst dessen paint Methode und zeichnest eben in deinem JFrame eine Linie nicht im Canvas.
Das JFrame hat es von Anfang an halt geerbt. Ich hab das nicht selbst programmiert und hab deshalb auch überhaupt kein Plan von irgendwas.
Neues Objekt heißt: private JFrame frame = new JFrame(); ?
Ich nehme an deine Klasse Versuch1 erbt von JFrame, du überschreibst dessen paint Methode und zeichnest eben in deinem JFrame eine Linie nicht im Canvas.[/QUOTE]
Ja das weiß ich auch aber keine Ahnung wie ich in das Canvas-Feld reinkomme. Weil ich will ja gar nicht in das JFrame
Das JFrame hat es von Anfang an halt geerbt. Ich hab das nicht selbst programmiert und hab deshalb auch überhaupt kein Plan von irgendwas.
Neues Objekt heißt: private JFrame frame = new JFrame(); ?
In dem du eine Klasse schreibst welchen von Canvas erbet, in dieser Klasse überschreibst du die entsprechende Methode und lässt deine Linie zeichnen.
Ein Objekt dieser Klasse fügst du dann als Componente zu einem JFrame Objekt hinzu.
Im Prinzip ja.
Canvas ist aber Bestandteil von AWT, der allerersten "Zeichenumgebung" von Java. Damit würde ich gar nicht erst anfangen. Der Nachfolger von AWT ist Swing (was zwar auch schon alt, aber mMn noch benutzbar ist).
Hier gibt es ein Tutorial, das erklärt, wie man in Swing zeichnet: https://www.java-forum.org/thema/zeichnen-in-swing-tutorial.146458/
Woher willst du wissen, ob ich mit AWT oder Swing arbeiten würde? Wenn du das nämlich nicht weisst, kannst du meine Aussage rein von der Logik gar nicht als "falsch" oder "richtig" bewerten.
Natürlich ist eine AWT-Komponente kompatibel zu einer Swing-Komponente. Und is se für den Anwendungsfall auch nicht "überdimensioniert"/unangemessen.
Ich würd mich auch nicht mit mir anlegen wollen.
Nimm es als Gegeben hin.
@moment.a : Eigentlich erst die Grundlagen, dann darauf aufbauendes.
Wenn du mit "anlegen" etwa "diskutieren" meinst, kann ich das nachvollziehen, allerdings aus anderen Gründen als sie dir ev. vorschweben. @moment.a : Mischen von Swing und AWT Komponenten in einer Gui ist zwar möglich, ich sehe aber keinen Grund damit anzufangen. Geh am besten den oben verlinkten Thread durch.
Wieder so eine kompromisslose Aussagen von dir, die du weder erklärst noch begründest. Worin liegen denn genau die Vorteile, auf einer Instanz von java.awt. Canvas zu zeichnen anstatt auf einer Instanz von javax.swing.JComponent oder JPanel?
Kommt darauf an, was man machen will. Canvas ist etwas "tiefer" unten, zeichnet etwas schneller. Aber außer für 3D-Sachen würde ich es nicht verwenden. Man kann einen Canvas in das Frame einfügen, verliert auf der Fläche natürlich die Swing-Funktionalität.