Ho un'interfaccia utente di dimensioni medio-grandi che utilizza un BorderLayout; il centro è un pannello a schede che contiene vari pannelli con vari layout, eccMantenere le dimensioni preferite dei componenti al centro di BorderLayout
voglio il pannello al centro di questo layout a bordo per ridimensionare in base alle dimensioni del finestra, ma non voglio i componenti all'interno il pannello da allungare. Etichette, caselle combinate, campi di testo, pulsanti: desidero che rimangano alle dimensioni preferite e consentono al riquadro che li contiene di allungare. Li metto in un riquadro di scorrimento nel caso lo spazio diventi troppo piccolo per il pannello.
Vari poster con vocaboli colorati mettono in guardia dal pericolo di utilizzare uno qualsiasi dei metodi setXXXsize() sui componenti. Questo è quello che faccio adesso, e mi piacerebbe imparare come evitarlo.
GridBagLayout non è appropriato per alcuni dei miei pannelli. È, per sua natura, orientato su righe e colonne, e non tutto si adatta a righe e colonne. Ovviamente potrei creare righe e colonne artificiali per adattarle a tutto, ma spero davvero che Swing abbia più opzioni di layout di quelle.
La colla verticale non lo fa neanche. Ho incluso nella amata SSCE di HFOE:
package example;
import java.awt.BorderLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BorderAndBox extends JFrame
{
public static void main(String args[])
{
BorderAndBox bnb = new BorderAndBox();
bnb.createUI();
bnb.setVisible(true);
}
public void createUI()
{
JPanel borderPanel = new JPanel(new BorderLayout());
JLabel northLabel = new JLabel("Nawth");
borderPanel.add(northLabel, BorderLayout.NORTH);
String[] southComboChoices = { "one", "two", "three" };
JComboBox southCombo = new JComboBox(southComboChoices);
borderPanel.add(southCombo, BorderLayout.SOUTH);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
String[] firstChoices = { "first", "uno", "UN" };
String[] secondChoices = { "second", "dos", "zwei" };
String[] thirdChoices = { "third", "tres", "drei" };
JComboBox firstCombo = new JComboBox(firstChoices);
JComboBox secondCombo = new JComboBox(secondChoices);
JComboBox thirdCombo = new JComboBox(thirdChoices);
centerPanel.add(firstCombo);
centerPanel.add(secondCombo);
centerPanel.add(thirdCombo);
centerPanel.add(Box.createVerticalGlue()); // first attempt; does NOT
// take up available vertical space, instead it appears to create a space
// that is shared equally among the (now) four components of this space.
borderPanel.add(centerPanel, BorderLayout.CENTER);
getContentPane().add(borderPanel);
pack();
}
}
Se si ingrandisce la finestra, le caselle combinate al centro ingrandire; come scritto, un pezzo di colla verticale sotto di loro si allarga, ma non occupa tutto lo spazio disponibile. Sembra che gli venga dato tanto spazio quanto ciascuno di essi.
Quindi, qual è un buon modo per avvicinarsi a questo?
* ".. SSCE amato:" * Lo amo anche io. Ed è SSCCE (2 C). ;) –
non può essere solo un piccolo esempio autonomo? – arcy
* "non può essere solo un piccolo esempio autonomo?" * [Quoting] (http://sscce.org/#co) una delle mie persone preferite: * "In questo documento, corretto (o compilabile, che si riferisce in particolare al codice sorgente del computer) significa assicurare che il tuo esempio si adatti agli standard e ai protocolli accettati. "* sottotitolo più importante *" Assicurati che il tuo esempio sia corretto. L'esempio si compila in modo pulito, o causa l'esatto messaggio di errore voglio aiuto. "* Il codice compilato e mostrato il problema, facile da fare. È * un * SSCCE. :) –