Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problemi nella posizione di un JButton

    Salve a tutti,da qualche giorno mi sto avvicinando alla programmazione ad oggetti e di conseguenza a Java.Il mio intento è quello di posizionare 2 Bottom in un JPanel,il quale a sua volta sarà racchiuso in un tab.Il problema è che quando cerco di posizionare i bottoni in basso della finestra,con BorderLayout,quando li aggiungo al JPanel e di conseguenza al tab e JFrame,vengono visualizzati in alto,come se BorderLayout venisse sovrascritto da qualche altro parametro.Vi posto il codice della classe nella quale è implementata l'interfaccia grafica

    codice:
    public ButtonInstall()
      {
         instButton = new JButton("Installa");
         infButton = new JButton("Info");
         closeButton = new JButton("Chiudi");
         instButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
              JOptionPane.showMessageDialog(closeButton,"E' stata avviata l'installazione dell'ambiente di sviluppo");
                    try
                    {
                        Process pr1 = Runtime.getRuntime().exec("");
                    }
                    catch (IOException ex)
                    {
                        Logger.getLogger(ButtonInstall.class.getName()).log(Level.SEVERE, null, ex);
                    }
            }
         });
        closeButton.addActionListener(new ActionListener ()
        {
             public void actionPerformed(ActionEvent e)
             {
               try
               {
                 System.exit(0);
               }
               catch(Exception ex)
               {
                 System.out.print("Errore");
               }
    
             }
        });
         
         
            JPanel p = new JPanel();
            JPanel ic = new JPanel();
            JPanel tr = new JPanel();
            JButton b = new JButton();
            tb = new JTabbedPane();
    
        // implementazione della text area di supporto per l'installazione
           
           JTextArea tx = new JTextArea("Installazione completa del pacchetto Ambiente");
           tx.setEditable(false);
           tx.setFont(new Font("Serif",Font.ITALIC,16));
           JScrollPane scroll = new JScrollPane(tx);
           scroll.setBorder(BorderFactory.createLineBorder(Color.black));
           scroll.setPreferredSize(new Dimension(300,100));
    
    // aggiunta dei pannelli 
            b.setText("<html><a href=\"http://127.0.0.1/\"> HTML </a></html>");
            p.add(b);
            ic.add(instButton, BorderLayout.SOUTH);
            ic.add(closeButton, BorderLayout.SOUTH);
            ic.add(scroll, BorderLayout.NORTH);
      
     // implementazione dei tab
             tb.addTab("Installazione",ic);
             tb.addTab("Compilazione",p);
             tb.addTab("Traduzione",tr);
    
     // JFRAME
            JFrame j = new JFrame();
            j.setTitle("Clipper32");
            j.setBounds(300,300,500,400);
            j.setPreferredSize(new Dimension(600,600));
            j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            j.getContentPane().add(tb);
            j.setVisible(true);
    Continuerò a chiedere al mio amico google nel frattempo Grazie a tutti
    Giuly Sei La Mia Vita

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Tieni presente che il BorderLayout occupa tutta l'area in cui lo inserischi, e se inserisci 2 componenti in una stessa zona il primo viene coperto dal secondo.

    Io vedo che aggiungi 2 bottoni a sud. Non capisco perchè non utilizzi gil altri pannelli...

    codice:
            ic.add(instButton, BorderLayout.SOUTH);
            ic.add(closeButton, BorderLayout.SOUTH);
            ic.add(scroll, BorderLayout.NORTH)
    comunque sistema questo, penso sia li il problema.

  3. #3
    Grazie Patrick per la risposta.Ho risolto inserendo un new BorderLayout nel pannello da inserire nel tab,ed inserendo null come secondo parametro nel metodo addTab :

    tb.addTab("Installazione",null,sud,"pannello installazione");

    in questo modo "annullo" le direttive di BorderLayout del jtabbedpane ereditando quelle del Jpane inserito.
    Grazie per i consigli,a breve tornerò a scrivere e domandare nel forum
    Giuly Sei La Mia Vita

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Potresti anche utilizzare più Layout insieme, combinandoli...diciamo che in questo modo si creano delle interfacce grafiche migliori.
    Non è bellissima la tua come "tecnica" comunque...

    Comunque di nulla

  5. #5
    Infatti è proprio questo che volevo domandarti.A questo punto i 2 bottoni si sovrappongono,come posso utilizzare 2 layout differenti?visto che border layout tende ad espandere il componente per tutta la zona indicata....grazie per la risposta
    Giuly Sei La Mia Vita

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Dipende in che modo li vuoi disporre ^^

    Volendo puoi anche disporli dando dimensioni fisse, tramite i metodi setBounds() e setLocation(); dovrai settare il Layout del JPanel a null però. Tuttavia in questo modo i componenti restano sempre alla stessa posizione.

  7. #7
    La mia idea è quella di disporre sulla stessa linea sia il button "installa" , che il button "chiudi". Se setto il layout del JPanle a null devo impostare il setBound per tutti i componenti racchiusi nel JPanel giusto? Ci sono altre soluzioni? Grazie per la risposta Patrick
    Giuly Sei La Mia Vita

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    L'alternativa, ma che reputo complessa, è l'utilizzo di GridBagLayout.

    Potresti provare altrimenti con un GridLayout con 2 righe, nella prima metti i bottoni (utilizzando FlowLayout, di default per JPanel) e nell'altra il BorderLayout con la scrollPane...non ho provato, quindi non so dirti precisamente che esce.
    Se non dovesse funzionare puoi provare inserendo il GridLayout all'interno di un FlowLayout.

    Se setti a null il JPanel si, devi specificare la posizione dei componenti, e del JPanel all'interno della finestra (ovviamente, se il pannello deve occupare tutto il frame puoi fare pannello.setBounds(0,0, width, height))

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 © 2025 vBulletin Solutions, Inc. All rights reserved.