Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220

    [JAVA] JTabbedPane e LayoutManager

    ciao gente, sono qui che mi cimento in sto cavolo di gioco in java ma i problemi pullulano..ehm...
    dunque io devo fare una roba così:

    ho una classe A che estende JPanel e in questo pannello ci vado a mettere tutti i miei oggettini! peccato che il LayoutManager non funzioni per nulla se io il pannello lo aggiungo a un tab del JTabbedPane!!
    All'interno del pannello voglio mettere un altro JPanel con la grandezza che voglio IO, nella posizione che decido IO!!! Ma se il pannello contenitore è aggiunto al tab...è un casino perchè fa quello che vuole lui!!

    public class A extends JPanel{
    public A(){
    setSize(640,480);//già qui non funziona perchè diventa grande
    //come tutto il tab

    setLayout(new BorderLayout());
    JPanel p=new JPanel();
    p.setSize(200,200);
    add(p,BorderLayout.CENTER);
    }
    }

    e poi
    JTabbedPane tabPane=new JTabbedPane();
    tabPane.add(new A());

    cioè, se io l'oggetto A lo aggiungo a un JFrame o altro di simile riesco a gestire gli oggetti interni come voluto, ma il JTabbedPane si comporta da bastardo!!

    insomma...boh..!!!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    il comportamento è più che normale. Se vuoi poter decidere tu la dimensione del componente anziché sia quest'ultimo ad occuparsi di dimensionarsi (ossia, andrà ad occupare tutto lo spazio a disposizione), dovrai settare a null il LayoutManager del JTabbedPane e quindi con setBounds sul JPanel che andrai ad aggiungerci ti sistemi il componente come e dove vuoi.

    Cerca qui sul forum, mi pare che se ne sia già parlato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    scusami ma non capisco perchè dovrebbe essere normale? se io setto un layoutmanager quello deve funzionare, indipendentemente se poi il contanitore lo aggiungo a sua volta in un JFrame,JPanel o che ne so...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    il JPanel viene disposto nel JTabbedPane, il quale di default cercherà di far occupare ai suoi componenti tutto lo spazio a disposizione (mi correggano se sbaglio). Per cui dovresti fare una cosa del genere

    codice:
    import javax.swing.*;
    import java.awt.*;
    
    class myPanel extends JPanel {
      
      JLabel background;
      private String path;
      
      protected ImageIcon getImageIcon(String path) {
        try {
          java.net.URL imgURL = new java.net.URL(path);
          ImageIcon icon = new ImageIcon(imgURL);
          return icon;
        }
        catch (Exception e) {
          System.out.println("Image not found!");
          return null;
        }    
      }
      
      public JLabel getLabel() {
        return background;
      }
      
      public myPanel(String path) {
        super();
        this.path = path;
        background = new JLabel(getImageIcon(path));
        this.add(background);    
      }
    }
    
    public class nullLayoutDemo extends JFrame {
    
      JTabbedPane tPane;
      myPanel panel;
    
      public nullLayoutDemo() {
        super("Demo con i Tabbed Pane");
        this.setSize(600, 400);
        this.getContentPane().setLayout(new BorderLayout());
        JLabel credits = new JLabel("Creato da Andrea");
        this.getContentPane().add(credits, BorderLayout.SOUTH);
        tPane = new JTabbedPane();
        JPanel comodo = new JPanel();
        comodo.setLayout(null);
        panel = new myPanel("http://www.google.it/logos/olympics06_ski_jump.gif");
        panel.setBounds(40, 50, panel.getLabel().getIcon().getIconWidth(),panel.getLabel().getIcon().getIconHeight());    
        comodo.add(panel);    
        tPane.addTab("Google Panel", comodo);
        
        
        this.getContentPane().add(tPane, BorderLayout.CENTER);
        this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
      }
      
      public static void main (String[] args) {
        nullLayoutDemo demo = new nullLayoutDemo();
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    ok funziona però..ho ancora un appuntino...ehm..
    se io ridimensiono la finestra principale allora voglio che tutto il panel contenitore si adatti...

    è un po' che programmo in java...non sono ancora esperto ma un po' me la cavo!! in futuro non romperò più le balls con ste domande!! promesso!!! grasssieee!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    eheheh... sapevo dove volevi andare a parare

    La disposizione di elementi GUI in java non è argomento depilato. Se tu vuoi che sia java a gestire il comportamento al ridimensionamento in maniera automatica, dovresti utilizzare i layoutmanager messi a disposizione... in particolare, per layout complessi, GridLayout e GridBagLayout (soprattutto l'ultimo ti consente di fare ciò che vuoi, ed è anche il più "ostico" da imparare a maneggiare).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.