SpringLayout con JLabel

di il
1 risposte

SpringLayout con JLabel

Buongiorno a tutti, sto utilizzando il layout SpringLayout, non riesco a posizionare due o più oggetti estesi a JLabel in quanto l'ultimo oggetto sovrascrive il precedente e quindi risulta visibile solo l'ultimo. Provo a spiegarmi meglio.
Se creo un oggetto e posiziono più JLabel in maniera sequenziale, cioè nella stessa classe, il problema non si pone, funziona tutto correttamente. Il problema si verifica quando ogni oggetto è un'estensione di JPanel.

Forse è più chiaro se pubblico il mio brevissimo codice, questo è il mio codice:

MAIN

package News;
public class Main {
public static void main(String[] args) {
FinestraArticolo finestra = new FinestraArticolo("Inserisci articolo", 800, 600);
}
}


FINESTRAARTICOLO

package News;
import java.awt.*;
import javax.swing.*;
public class FinestraArticolo extends JFrame {
String titoloFinestra;
int larghezza;
int altezza;

Etichetta etichettaTitolo;
Etichetta etichettaSommario;

FinestraArticolo(String titoloFinestra, int larghezza, int altezza) {

super(titoloFinestra);

this.titoloFinestra = titoloFinestra;
this.larghezza = larghezza;
this.altezza = altezza;

// Impostazioni della finestra da aprire con il JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(larghezza, altezza);
setLocationRelativeTo(null);
setResizable(false);

//JFrame f = new JFrame();
Container contenitore = getContentPane();

etichettaTitolo = new Etichetta("wwwwwwwwwwwwwww", 5, 5, contenitore);
add(etichettaTitolo);

etichettaSommario = new Etichetta("qqqqqqqqqqqqqqqq", 5, 50, contenitore);
add(etichettaSommario);

setVisible(true);

}
}

ETICHETTA

package News;
import java.awt.*;
import javax.swing.*;
public class Etichetta extends JLabel {
JLabel etichetta;
String valore;
int x;
int y;
Container contenitore;

Etichetta(String valore, int x, int y, Container contenitore) {
this.valore = valore;
this.x = x;
this.y = y;
this.contenitore = contenitore;

etichetta = new JLabel(valore);

SpringLayout layout = new SpringLayout();
setLayout(layout);

layout.putConstraint(SpringLayout.WEST, etichetta, x, SpringLayout.WEST, contenitore);
layout.putConstraint(SpringLayout.NORTH, etichetta, y, SpringLayout.NORTH, contenitore);
add(etichetta);
}
}

Spero che qualcuno possa testare queste due classi.

Grazie in anticipo.

1 Risposte

  • Re: SpringLayout con JLabel

    dev.pro.temp ha scritto:


    Forse è più chiaro se pubblico il mio brevissimo codice, questo è il mio codice:
    Quello che hai postato come esempio comunque è parecchio "contorto". Etichetta è un JLabel ma al suo interno tieni un ulteriore JLabel (perché due quindi?). E il secondo JLabel lo aggiungi come child in Etichetta (in pratica Etichetta è un "contenitore" con dentro un JLabel).
    Ma non ha importanza il fatto che Etichetta abbia lo SpringLayout, nel costruttore del frame fai:
            etichettaTitolo = new Etichetta("wwwwwwwwwwwwwww", 5, 5, contenitore);
            add(etichettaTitolo);
    
            etichettaSommario = new Etichetta("qqqqqqqqqqqqqqqq", 5, 50, contenitore);
            add(etichettaSommario);
    Questi DUE add sono riferiti al content-pane, che per default ha un BorderLayout che contempla solo 5 aree. E siccome non hai specificato alcun constraint, prima etichettaTitolo va a finire nel CENTER, poi etichettaSommario lo sostituisce sempre nel CENTER. E quindi "vedi" SOLO etichettaSommario.

    Insomma ... MOLTO contorto. Non è così che si va molto avanti in Swing ....


    P.S. SpringLayout è uno dei layout manager più complicati e intricati, perché vuoi proprio usarlo "a mano"?
Devi accedere o registrarti per scrivere nel forum
1 risposte