Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    [SWING] Problema GridBagLayout

    Ciao a tutti.

    Sto creando una interfaccia grafica.
    Al momento ho 3 macro oggetti che il mio frame deve contenere.

    Incollo il codice e poi vi spiego:

    Codice PHP:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;


    public class 
    ChatUI {
        public static 
    void main (String [] args)
        {
            
    EventQueue.invokeLater (new Runnable()
            {
                public 
    void run(){
                    
    start();
                }
            });
        }

        public static 
    void start()
        {
            final 
    JTextPane textPane = new JTextPane();
            final 
    JTextField chatArea = new JTextField(20);

            
    GridBagLayout layout = new GridBagLayout();
            
    GridBagConstraints lim = new GridBagConstraints();


            
    JScrollPane areaScroller = new JScrollPane(textPane);
            
    areaScroller.setPreferredSize (new Dimension(400,400));

            
    JButton button = new JButton(new AbstractAction("Colore") {
            @
    Override public void actionPerformed(ActionEvent e) {
                
    AttributeSet currentAtt textPane.getCharacterAttributes();
                
    Color color StyleConstants.getForeground(currentAtt);
                
    color JColorChooser.showDialog(textPane"Colore"color);
                if(
    color != null) {
                    
    SimpleAttributeSet att = new SimpleAttributeSet();
                    
    StyleConstants.setForeground(attcolor);
                    
    textPane.setCharacterAttributes(atttrue);
                    
    textPane.requestFocusInWindow();
                    }
                }
            });

            
    lim.gridx 0;
            
    lim.gridy 0;
            
    lim.gridwidth 2;
            
    lim.gridheight=1;
            
    layout.setConstraints(areaScrollerlim);

            final 
    ImageIcon immagine = new ImageIcon("images/green.jpg");
           
    JComponent background = new JPanel() {

                @
    Override
              
    protected void paintComponent(Graphics g) {
                
    g.drawImage(immagine.getImage(), 00getWidth(), getHeight(), null);
                }
            };
            
    background.setPreferredSize(new Dimension(400400));
        
            
    JPanel foreground = new JPanel();

            
    foreground.setLayout(layout);
            
    foreground.setOpaque(false);
         
    //   foreground.setAlignmentX(Component.LEFT_ALIGNMENT);


            
    JPanel buttonContainer = new JPanel ();

            
    lim.gridx 0;
            
    lim.gridy 1;
            
    lim.gridwidth 1;
            
    lim.gridheight=1;
            
    layout.setConstraints(buttonContainerlim);

            
    buttonContainer.add(button);

            
    lim.gridx 1;
            
    lim.gridy 1;
            
    lim.gridwidth 1;
            
    lim.gridheight=1;
            
    layout.setConstraints(chatArealim);

            
    JPanel contenitore = new JPanel();
            
            
    //contenitore.setLayout(layout);


            
    foreground.add(areaScroller);
            
    foreground.add(buttonContainer);
            
    foreground.add(chatArea);

            
    contenitore.add(foreground);
            
    contenitore.add(background);


            
    JFrame window = new JFrame("ChatUI");
            
    window.add(contenitore);
            
    window.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
            
    window.pack();
            
    window.setVisible(true);


        }


    I miei 3 macro componenti sono: areaScroller, textField e il buttonContainer.

    Ora , vorrei ordinarli con il gridBagLayout e ho formato una griglia immaginaria.
    Questa griglia e' (come si vede dalle costanti di gridBagLayout) un quadrato, diviso in 4: la prima riga, deve essere occupata da areaScroller (che occupa i 2 quadratini della prima riga).
    Gli ultimi due quadratini in basso son occupati da textField e dal buttonContainer.

    Ora, mi sapere dire dove sbaglio?
    Perche' invece che sovrappormi i miei elementi, mette foreground e contenitore separati.

    In pratica uso un "master" contenitore.
    Questo contenitore a sua volta contiene il JPanel background, che contiene l'immagine di fondo.
    Foreground invece contiene tutti i miei componenti della UI, quindi io ho applicato al foreground il mio ordinamento.
    Pero' devo aver sbagliato qualcosa li...

    Help!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [SWING] Problema GridBagLayout

    Originariamente inviato da Skaffa
    Ora, mi sapere dire dove sbaglio?
    Perche' invece che sovrappormi i miei elementi, mette foreground e contenitore separati.
    'contenitore' è un JPanel ma non hai settato esplicitamente un layout manager .... quindi rimane il layout di default che è FlowLayout. Che ovviamente non "sovrappone" un bel nulla!!!

    E se parliamo di "sovrapposizione" di componenti la questione è delicata. Perché i layout manager generalmente non permettono di sovrapporre componenti e li tengono separati visualmente. E se anche certi layout manager complessi come es. SpringLayout consentono di mettere i componenti un po' dove si vuole, lo "z-order" è critico perché generalmente dipende dalla sequenza di inserimento nel contenitore.

    Quindi non devi cercare la sovrapposizione di componenti separati!! Devi fare in modo che il tuo pannello di background (dove disegni la immagine) faccia da "contenitore" di altri componenti. E questo è perfettamente possibile .... dopotutto JPanel è un contenitore generico ... no?

    Vedi tra i miei Java Examples, sezione Graphics l'esempio TiledBackground.java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.