Domanda

Sono nuovo a Java Swing e ho lottato per iniziare la gridbaglayout dall'angolo in alto a sinistra in modo che C.Gridx = 0 C.Gridy = 0 metta il mio oggetto nell'angolo in alto a sinistra.

Apprezzerei se potessi aiutarmi dicendo cosa devo fare dopo questo punto:

    JPanel panel = new JPanel(new GridBagLayout());
    frame.add(panel);
    GridBagConstraints c = new GridBagConstraints();

So che devo usare le costanti a nord -ovest o first_line_start, ma non so come. Ho provato a farlo in questo modo ", ma non mi rendevo conto delle costanti.

    frame.getContentPane().add(panel, BorderLayout.NORTHWEST);

Grazie per l'aiuto.

È stato utile?

Soluzione

Devi usare il tuo GridBagConstraints' anchor proprietà. Questo dovrebbe farlo per te:

frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
frame.add(panel, gbc);

Non sto garantendo che non dovrai impostare altre proprietà dell'oggetto vincoli per ottenere il layout che desideri. In particolare, potrebbe essere necessario impostare widthx e widthy essere 1 in modo che il pannello occupino tutto lo spazio disponibile.

Altri suggerimenti

Leggi la sezione dal tutorial Swing su Come usare GridBaglayout. Il settone su "pesi, pesanti" afferma:

A meno che non si specifichi almeno un valore diverso da zero per pesi o pesi, tutti i componenti si raggruppano al centro del loro contenitore.

Per quelli, che usano IDE (ad es. NetBeans), ho finalmente trovato un bel trucco: se vuoi aggiungere componenti in cima e utilizzare le loro dimensioni preferite: aggiungi un altro pannello vuoto con pesante = 1.0. Copiato dal codice generato automaticamente (NetBeans):

gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.weighty = 1.0;
jPanelOptions.add(jPanelFiller, gridBagConstraints);

Un modo rapido e semplice:

Aggiungi un jlabel vuoto alla fine della pagina:

    // your code goes here
    gbc.weightx = 1;
    gbc.weighty = 1;

    bg.add(new JLabel(" "), gbc);  // blank JLabel

C'è una soluzione alternativa. Puoi mettere il pannello GridBaglayout in un pannello Borderlayout con BorderLayout.North. Quindi il componente nel pannello GridBaglayout inizierà dalla posizione più alta.

static void test4(){
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(480, 360);

    JPanel borderLayoutPanel=new JPanel(new BorderLayout());
    JPanel gridBagLayoutPanel = new JPanel(new GridBagLayout());
    borderLayoutPanel.add(gridBagLayoutPanel, BorderLayout.NORTH);
    frame.add(borderLayoutPanel);

    JButton testButton=new JButton("test button");
    GridBagConstraints c = new GridBagConstraints();
    c.gridx=0;
    c.gridy=0;
    gridBagLayoutPanel.add(testButton, c);

    frame.setVisible(true);
}

enter image description here

Se vuoi che la griglia vada fino in alto, impostare semplicemente tutto il tuo pesante = 0 fino all'ultimo elemento, impostala su qualsiasi numero maggiore di 0, spingerà effettivamente il resto dei pulsanti in alto.

Non dimenticare di incrementare anche il valore grigliare del tuo pulsante.

Altrimenti sarà centrato. (Lo stesso può essere fatto usando il valore GRIDX e WeightX se non si utilizza la proprietà C.Fill = GridBagConstraints.Horizontal.)

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