qualcuno sa come si allinea il titolo di una tab a sinistra?
grazie..
qualcuno sa come si allinea il titolo di una tab a sinistra?
grazie..
Precisiamo: intendi il testo sull'header di una colonna in una JTable?Originariamente inviato da jin85
qualcuno sa come si allinea il titolo di una tab a sinistra?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ah ok ... sì avevo pensato anche a quello ma avevo il dubbio.Originariamente inviato da jin85
scusami, mi sono espresso male..volevo sapere come allineare il testo di ogni singola tab di un jtabbedpane.
L'unica cosa che ti posso dire è che da Java 6 la classe JTabbedPane ha i metodi setTabComponentAt() e getTabComponentAt().
Non li ho mai usati, quindi non ti so dire di preciso. Magari puoi provare a fare un "esperimento": istanzia che so ... un JLabel, impostagli il testo e un allineamento a sinistra, quindi usa setTabComponentAt() per assegnare il componente.
Purtroppo ora non ho tempo di provare ... se provi dimmi poi cosa salta fuori.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
il problema è questo...io carico quei nomi nelle tab tramite un ciclo, poichè li prendo da un file xml...al momento del caricamento quei nomi x me non sono delle JLabel, ma String.
come vedi quando faccio addTab, inserisco "nomcognom" che è di tipo Stringcodice:for (int i=0; i<listamedici.size();i++){ Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe); PannelloFrame.setSize(this.getSize()); String nomcognom =listamedici.get(i).getNominativo(); //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT); tabbedPane.addTab(nomcognom,PannelloFrame); String PanneloFrame = PannelloFrame+"i"; }
quindi ammesso che funzionasse quell'esperimento con JLabel, nn mi sarebbe utile nel mio caso, poichè ho String..correggimi se sbaglio.
Il primo parametro di addTab() è un String e su questo non ci piove. Non è qui che potresti agire.Originariamente inviato da jin85
il problema è questo...io carico quei nomi nelle tab tramite un ciclo, poichè li prendo da un file xml...al momento del caricamento quei nomi x me non sono delle JLabel, ma String.
come vedi quando faccio addTab, inserisco "nomcognom" che è di tipo String
quindi ammesso che funzionasse quell'esperimento con JLabel, nn mi sarebbe utile nel mio caso, poichè ho String..correggimi se sbaglio.
Io stavo parlando di usare setTabComponentAt(). Con questo (da Java 6) puoi impostare un componente da visualizzare sulla "linguetta" del tabbed pane. Il addTab() lo devi fare comunque .... il componente da visualizzare nell'area del tabbed pane lo devi aggiungere, no?
Se usi setTabComponentAt() però il componente che passi va a "sovrascrivere" la stringa che passi ad addTab().
E comunque ho fatto proprio adesso una prova con setTabComponentAt(). Puoi inserire un componente come JLabel ma non puoi allinearlo a sinistra nella linguetta. Il problema non è nella JLabel in sé .... ma nel come il tabbed pane dispone il contenuto delle linguette. Infatti il tabbed pane si basa solo sul "preferred" size del componente.
Una possibilità ci sarebbe: impostare un preferred size abbastanza "largo" per la JLabel impostata con setTabComponentAt().
Ecco un esempio:
codice:import java.awt.*; import javax.swing.*; public class TabbedTabAlignTest { public static void main (String[] args) { SwingUtilities.invokeLater (new Runnable () { public void run () { TabbedTabAlignTestFrame f = new TabbedTabAlignTestFrame (); f.setVisible (true); } }); } } class TabbedTabAlignTestFrame extends JFrame { private JTabbedPane tabbedPane; public TabbedTabAlignTestFrame () { super ("Tabbed Tab Align Test"); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); setSize (300, 300); tabbedPane = new JTabbedPane (JTabbedPane.LEFT); tabbedPane.addTab ("bla bla bla", new JLabel ("1")); tabbedPane.addTab ("hello", new JLabel ("2")); tabbedPane.addTab ("world", new JLabel ("3")); JLabel label1 = new JLabel ("ABC", SwingConstants.LEFT); label1.setPreferredSize (new Dimension (150, label1.getPreferredSize().height)); tabbedPane.setTabComponentAt (1, label1); getContentPane ().add (tabbedPane); } }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
si ma nel tuo caso ti sei creato una JLabel che sovrascrive il contenuto del secondo tab, ma nel mio caso invece ho questo:
tramite questo ciclo, carico i nomi nelle varie tab, come puoi vedere ogni nome è rappresentato da "nomcognom" , e ogni "nomcognom" lo vado a prendere facendo listamedici.get(i).getNominativo();codice:for (int i=0; i<listamedici.size();i++){ Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe); PannelloFrame.setSize(this.getSize()); String nomcognom =listamedici.get(i).getNominativo(); //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT); tabbedPane.addTab(nomcognom,PannelloFrame); String PanneloFrame = PannelloFrame+"i"; }
quindi quello che ti voglio dire è : come faccio nel mio caso ad associare una prefered size abbastanza grande a nomcognom che è di tipo String ?? nn so se sn stato chiaro..
in poche parole, io nn mi posso creare della JLabel che vanno a sovrascrivere il contenuto iniziale, poichè ho già i nomi che mi servono in nomcognom.
Allora non mi sono spiegato io ..... facciamo l'ipotesi di usare setTabComponentAt() per impostare una JLabel (con un preferred size sufficiente).Originariamente inviato da jin85
quindi quello che ti voglio dire è : come faccio nel mio caso ad associare una prefered size abbastanza grande a nomcognom che è di tipo String ?? nn so se sn stato chiaro..
in poche parole, io nn mi posso creare della JLabel che vanno a sovrascrivere il contenuto iniziale, poichè ho già i nomi che mi servono in nomcognom.
La prima stringa che passi ad addTab() la puoi anche passare vuota!! Poi a setTabComponentAt() passi un JLabel costruito con la tua stringa.
Più chiaro? L'unico problema sarebbe quello di stabilire o calcolare la larghezza "preferita".codice:tabbedPane.addTab("",PannelloFrame); JLabel labTab = new JLabel (nomcognom, SwingConstants.LEFT); // imposta preferred size a labTab tabbedPane.setTabComponentAt (i, labTab);
Ammetto che come soluzione non è il massimo .... lo so, non dirmelo.
In alternativa ... proprio al limite, potresti non usare un JTabbedPane! Un'altra soluzione sarebbe quella di suddividere la finestra principale in 2 parti (con un apposito layout manager): a sinistra una JList che contiene i tuoi nomi e a destra un JPanel che ha un layout manager CardLayout che contiene i tuoi vari pannelli. CardLayout ti permette di mostrare 1 solo componente tra gli N aggiunti nel CardLayout. Concettualmente proprio come fa JTabbedPane. Solo che JTabbedPane ti mette pure le "linguette".
Soluzioni di questo tipo cioè una lista a sinistra e a destra visualizzato 1 di N pannelli, sono usate in molti software. Ad esempio nella dialog "preferences" di Opera 7.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ho fatto in questo modo :
come faccio però a creare nel ciclo delle label progressive..in base alla i iniziale?xkè se lascio sempre label, mi sovrascrive tutto..e mi crea casini.codice:for (int i=0; i<listamedici.size();i++){ Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe); PannelloFrame.setSize(this.getSize()); String nomcognom =listamedici.get(i).getNominativo(); //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT); tabbedPane.addTab(nomcognom,PannelloFrame); JLabel label = new JLabel (nomcognom, SwingConstants.LEFT); label.setPreferredSize (new Dimension (150, label.getPreferredSize().height)); tabbedPane.setTabComponentAt (i, label); String PanneloFrame = PannelloFrame+"i"; }
mi spiego meglio con delle immagini...inizialmente il mio codice era questo :
e le tab venivano in questo modo :codice:for (int i=0; i<listamedici.size();i++){ Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe); PannelloFrame.setSize(this.getSize()); String nomcognom =listamedici.get(i).getNominativo(); tabbedPane.addTab(nomcognom,PannelloFrame); String PanneloFrame = PannelloFrame+"i"; }
scrivendo il codice per l'allineamento a sinistra abbiamo fatto così :
e le tab mi vengono in questa maniera sballata :codice:for (int i=0; i<listamedici.size();i++){ Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe); PannelloFrame.setSize(this.getSize()); String nomcognom =listamedici.get(i).getNominativo(); tabbedPane.addTab("",PannelloFrame); JLabel labtab = new JLabel (nomcognom, SwingConstants.LEFT); labtab.setPreferredSize (new Dimension (150, labtab.getPreferredSize().height)); tabbedPane.setTabComponentAt (i, labtab); String PanneloFrame = PannelloFrame+"i"; }
come mai questa cosa?cm posso ovviare?
purtroppo nn posso usare l'altro metodo che hai detto tu..poichè il prof vuole il jtabbedpane.