Statusleiste

Status
Nicht offen für weitere Antworten.

Blade230

Mitglied
Hallo Forum,
ich habe mir eine Classe StatusBar geschrieben. Hier der Code:

Code:
/*
 * StatusBar.java
 *
 * Created on 20. Januar 2005, 15:01
 */

package sys.cls;

/**
 *
 * @author  ezdqq
 */
import javax.swing.JToolBar;
import javax.swing.JToolBar.Separator;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Image;
import java.lang.Math;
import java.awt.Dimension;
public class StatusBar extends JToolBar{
    
    /** Creates a new instance of StatusBar */
    private int iAnzahl;
    private JFrame pFrame;
    private StatusBar sb;
    
    
    public StatusBar(int i, JFrame frame,int iHeight) { //i= anzahl von JLabeln in der Statusleister,
                                                        //frmae = parent Frame, iHeight = höhe
        this.setSize((frame.getWidth()-5), iHeight);    //größe setzen
        this.setFloatable(false);                       //Nicht Dragable
        this.setLocation(0, (frame.getHeight()-(iHeight+50))); //Positionieren
        this.setBorder(new javax.swing.border.EtchedBorder()); // Border setzen
        for(int a =0; a < i;a++) {      //JLabel einbinden
            JLabel jl = new JLabel();
            jl.setName("msg_"+(a+1));
            jl.setText("msg_"+(a+1));   //Text zum Testen eingenben.
            jl.setBorder(new javax.swing.border.EtchedBorder());  //Border 
            jl.setPreferredSize(new Dimension(Math.round(frame.getWidth()/3),iHeight)); //Größe der Label
            add(jl);
        }
    }
    
  
    public void setMsg(String msg, int i) {
      
    }
    
    public void setMsg(String msg, int i, Image img){
        
    }

Der Anwender kann beim initialisieren der Classe bestimmen, in wieviel "Unteranzeigen" die Statusleiste aufgebaut wird.
Beim erstellen gebe ich jedem JLabel den Name "msg_"+(i+1).

Jetzt möchte ich die einzelnen Felder angesprochen bekommen über setMsg. Dabei soll die Nachricht / Icon und die Feldnummer(i) angeben werden.

Ich bekomme es nicht hin, das JLabel anzusprechen.

Was muss in setMsg stehen, damit die Nachricht angezeigt wird???

Danke für Eure Hilfe.

Tom
 

Blade230

Mitglied
Hallo sky80,

habe jetzt mal deinen Vorschlag versucht.

Code:
/*
 * StatusBar.java
 *
 * Created on 20. Januar 2005, 15:01
 */

package sys.cls;

/**
 *
 * @author  ezdqq
 */
import javax.swing.JToolBar;
import javax.swing.JToolBar.Separator;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Image;
import java.lang.Math;
import java.awt.Dimension;
public class StatusBar extends JToolBar{
    
    /** Creates a new instance of StatusBar */
    private int iAnzahl;
    private JFrame pFrame;
    private StatusBar sb;
    private JLabel[] jla;  //-->Neu
    private JLabel jl;  //->Neu
    
    public StatusBar(int i, JFrame frame,int iHeight) { //i= anzahl von JLabeln in der Statusleister,
                                                        //frmae = parent Frame, iHeight = höhe
        jla = new JLabel[i];     //->Neu                               
        this.setSize((frame.getWidth()-5), iHeight);    //größe setzen
        this.setFloatable(false);                       //Nicht Dragable
        this.setLocation(0, (frame.getHeight()-(iHeight+50))); //Positionieren
        this.setBorder(new javax.swing.border.EtchedBorder()); // Border setzen
        /*for(int a =0; a < i;a++) {      //JLabel einbinden
            JLabel jl = new JLabel();
            jl.setName("msg_"+(a+1));
            jl.setText("msg_"+(a+1));   //Text zum Testen eingenben.
            jl.setBorder(new javax.swing.border.EtchedBorder());  //Border 
            jl.setPreferredSize(new Dimension(Math.round(frame.getWidth()/3),iHeight)); //Größe der Label
            add(jl);
        }*/
        System.out.println("Array: " + jla.length);
        for(int a = 0; a < jla.length;a++) //->Neu von hier
        {
             jl = new JLabel();
             jla[a].add(jl);
             jla[a].setText("msg_"+a);
             jla[a].setBorder(new javax.swing.border.EtchedBorder());  //Border 
             jla[a].setPreferredSize(new Dimension(Math.round(frame.getWidth()/3),iHeight)); //Größe der Label
             
        } //bis hier
    }
    
  
    public void setMsg(String msg, int i) {
        jla[i].setText(msg); //->Neu
        this.validate(); //->Neu
    }
    
    public void setMsg(String msg, int i, Image img){
        
    }
    
}

leider bekomme ich eine NullpointerException beim jla[a].add(jl).

Habe aber keine Ahnung warum.

Einen kleinen Tip könnte ich gebrauchen.


Danke

Tom
 
B

Beni

Gast
Du musst den Array auch füllen:
Code:
        for(int a = 0; a < jla.length;a++) //->Neu von hier
        {
             jla[a] = new JLabel();
 

Blade230

Mitglied
Hallo Beni,


habe ich ja.

Der Fehler war, des es nicht jla[a] = new JLabel heißen muss, sondern this.add(jla[a] = new JLabel()).


Danke an alle.

Tom
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben