In Java zeichnen, mit Swing Methode

Hallo ihr Lieben,

vorab: Ich weiß dass es zu diesem Thema schon viele Tutorien gibt, doch an dieser Stelle weiß ich einfach nicht mehr weiter.

Ich möchte ein Klasse schreiben, bei der ich einer setter-Methode ein int-Array übergebe und dann die inhalte des Arrays gezeichnet werden.
Wichtig hierbei ist, dass eine vorgegebene Zeichnung hierbei nicht verloren geht.

Hier mal mein Code dazu:

package tek;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JLabel;

/\*\*
 \*
 \* @author brayn
 \*/


public class Schnittkräfte extends javax.swing.JFrame {


 Label label;
 int[] werte;
 Label l = new Label();

 Schnittkräfte() {
 initComponents();
 setLayout(null);
 //werte = this.werte.clone();

 label = new Label();
 label.setBounds(0, 0, 4000 , 2000);
 add(label);
 }





 public void setWerte(int[] wert){

 this.werte = new int[wert.length];

 for(int i=0; i 
 private void initComponents() {

 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();

 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT\_ON\_CLOSE);

 jLabel1.setFont(new java.awt.Font("L M Roman10", 0, 24));
 jLabel1.setText("Schnittkräfteverlauf");
 jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);

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

 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED\_SIZE, 220, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addContainerGap(580, Short.MAX\_VALUE))
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 .addContainerGap(615, Short.MAX\_VALUE)
 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED\_SIZE, 106, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addGap(91, 91, 91))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED\_SIZE, 41, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 297, Short.MAX\_VALUE)
 .addComponent(jButton1)
 .addGap(78, 78, 78))
 );

 pack();
 }// 

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
 // TODO add your handling code here:
 //jetzt soll gezeichnet werden
 l.repaint();

 }

 /\*\*
 \* @param args the command line arguments
 \*/





 public void main() {
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 Schnittkräfte schnitt = new Schnittkräfte();
 schnitt.setVisible(true);
 schnitt.setDefaultCloseOperation(schnitt.DISPOSE\_ON\_CLOSE);
 }
 });
 }

 // Variables declaration - do not modify
 private javax.swing.JButton jButton1;
 private javax.swing.JLabel jLabel1;
 // End of variables declaration

}

Ich bin so weit, dass ich mir das Grundmodell, das nicht verloren gehen soll, gezeichnet habe. Nun sollen wie bereits erwähnt, bei jedem neuen setter-Aufruf, die Werte des übergebenen Arrays neu gezeichnet werden. Ich habe gehoft, dass ich mit der repaint-Methode hier weiterkommen würde, doch das klappt irgendwie nicht. Kann mir jemand Erklären was ich falsch mache?

Liebe Grüße Matthias

OT: mehr auf w-w-w
Hallo,

ich könnte vermutlich nicht viel zur Lösung beitragen, weil Swing nicht so mein Ding ist, wollte aber trotzde zum Spaß die Klasse kurz compilieren und testen (Wenn schon mal jemand vollständigen, formattierten Sourcecode liefer).

was passiert: im Editor erscheint nach dem Kopieren alles in einer Zeile gefolgt von … mehr auf http://w-w-w.ms/a46ptp

Ich habe die Diskussion um diesen „Feature“ im ALK Brett am Rande verfolgt, und den Sinn nie verstanden. Aber in den Programmier-Brettern ist das ja wohl der letzte Dreck. Wüsste leider nicht wie man das umgehen kann, im HTLM Sourcecode ist es zwar etwas besser, da wird aber

Gelöst
Ich habs :smile:

Ich habe ein weiteres Tutorial gefunden(http://www.info-wsf.de/index.php/Wie_kann_man_in_Jav…), das hat mir ein bischen geholfen, dann noch bischen probiert und siehe da, es funktioniert :smile:

Das ganze sieht nun so aus:

/\*
 \* To change this template, choose Tools | Templates
 \* and open the template in the editor.
 \*/

/\*
 \* Schnittkräfte.java
 \*
 \* Created on 04.11.2012, 01:27:40
 \*/

package tek;


import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;

/\*\*
 \*
 \* @author brayn
 \*/


public class Schnittkräfte extends javax.swing.JFrame {


 Label label;
 static TEK\_Programm.Werte[] werte;

 private JPanel zeichenflaeche = new JPanel(null);


 Label l = new Label();

 Schnittkräfte(TEK\_Programm.Werte[] zahlen) {
 initComponents();
 setLayout(null);


 label = new Label();
 label.setBounds(0, 0, 4000 , 2000);
 add(label);

 this.werte = new TEK\_Programm.Werte[zahlen.length];


 setWerte(zahlen);



 }





 public void setWerte(TEK\_Programm.Werte[] wert){

 this.werte = new TEK\_Programm.Werte[wert.length];



 for(int i=0; i 
 private void initComponents() {

 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();

 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT\_ON\_CLOSE);

 jLabel1.setFont(new java.awt.Font("L M Roman10", 0, 24)); // NOI18N
 jLabel1.setText("Schnittkräfteverlauf");
 jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);

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

 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED\_SIZE, 220, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addContainerGap(580, Short.MAX\_VALUE))
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 .addContainerGap(649, Short.MAX\_VALUE)
 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED\_SIZE, 106, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addGap(57, 57, 57))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED\_SIZE, 41, javax.swing.GroupLayout.PREFERRED\_SIZE)
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 312, Short.MAX\_VALUE)
 .addComponent(jButton1)
 .addGap(63, 63, 63))
 );

 pack();
 }// 

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
 // TODO add your handling code here:
 //jetzt soll gezeichnet werden

 repaint();

 } 

 /\*\*
 \* @param args the command line arguments
 \*/





 public void main(final TEK\_Programm.Werte[] zahl) {
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 Schnittkräfte schnitt = new Schnittkräfte(zahl);
 schnitt.setVisible(true);
 schnitt.setDefaultCloseOperation(schnitt.DISPOSE\_ON\_CLOSE);
 }
 });
 }

 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JLabel jLabel1;
 // End of variables declaration 

}

Der Verbundtyp Werte enthällt nur zwei Attribute, nämlich wert und stelle beides vom Typ int.

LG Matthias