Domanda

Questo è ciò che il mio programma dovrebbe essere simile e io sono un po 'confuso su dove dovrei usare diversi layout.

Ho una classe finestra che chiama il Pannello classe e la classe Panel chiama le classi InputPanel e DisplayPanel. La mia classe InputPanel chiama mie classi DetailsPanel, CrimePanel e ButtonPanel modo essi costituiscono ciò che si vede nella scheda Input. Mi è stato detto di usare un BorderLayout per l'intera finestra, e che il DetailsPanel (pannello di sinistra) e CrimePanel dovrebbe essere GridLayout.

Questo significa dovrei:

  1. Inserire il codice BorderLayout nel pannello e il codice GridLayout in CrimePanel e DetailsPanel o
  2. Inserire il codice BorderLayout in Window ed il codice GridLayout nel Pannello?

alt text http://img137.imageshack.us/img137/6422/93381955 .jpg

È stato utile?

Soluzione

Ok, la tua descrizione è un po 'di confusione (o io sono ancora troppo stanco oggi o non hanno abbastanza caffeina ancora). Il tuo concetto di classi del pannello "chiamata" da parte degli altri è anche un po 'strano.

Ma, per quanto posso vedere, la prima opzione è quella corretta.

In generale è sufficiente nido gli oggetti in fase di esecuzione, quindi potrebbe sembrare un po 'come il seguente:

InputPanel (has BorderLayout)
+--DetailsPanel (put in BorderLayout.WEST; has GridLayout)
|  +--nameLabel
|  +--nameTextField
|  +--...
+--CrimePanel (put in BorderLayout.NORTH; has GridLayout)
|  +--murderRadioButton
|  +--arsonRadioButton
|  +--...
+--ButtonPanel (put in BorderLayout.CENTER; has GridLayout)
   +--button

Di solito fare questo nel costruttore della classe appropriata:

public class InputPanel {
    public InputPanel() {
        this.setLayout(new BorderLayout());
        this.add(new DetailsPanel(), BorderLayout.WEST);
        this.add(new CrimePanel(), BorderLayout.NORTH);
        this.add(new ButtonPanel(), BorderLayout.CENTER);
    }
}

public class DetailsPanel {

    JLabel nameLabel;
    JTextField nameField;
    // ...

    public DetailsPanel() {
        this.setLayout(new GridLayout(5, 1));

        nameLabel = new JLabel("Name");
        nameField = new JTextField();
        // ...

        this.add(nameLabel);
        this.add(nameField);
        // ...
    }
}

...

Comunque, vedo un piccolo problema qui: Dal momento che GridLayout non consente componenti coprono più colonne potrebbe essere necessario nido altri pannelli in DetailsPanel a sinistra pure. Si può ottenere via con un singolo GridBagLayout che ha le capacità necessarie, oppure si nidificare altri pannelli là:

DetailsPanel (has BorderLayout)
+--panel1 (has GridLayout with 2 rows, 1 column; put in BorderLayout.NORTH)
|  +--nameLabel
|  +--nameField
+--panel2 (has GridLayout with 3 rows, 2 columns; put in BorderLayout.CENTER)
   +--dayField
   +--dayLabel
   +--monthField
   +--...

Altri suggerimenti

Dalla tua descrizione, l'opzione 1 dovrebbe funzionare. Dare l'input JPanel un BorderLayout, con i dettagli, la criminalità e Button JPanels (a ovest, nord e sud, rispettivamente) avendo GridLayouts.

Prima di tutto è necessario mettere un JTabbedPane nella finestra per contenere le due schede (di ingresso e di visualizzazione), ciascuna composta di un JPanel.

Il pannello d'ingresso potrebbe essere suddiviso utilizzando un BorderLayout come descritto Joannes; Un'altra alternativa è il GroupLayout introdotto in Java 6, che è molto potente, ma difficile da avvolgere la mente intorno. Potrebbe essere usato per disporre l'intera scheda in un pannello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top