Sto cercando di creare la seguente GUI:GridBagLayout gridding non funziona
ma l'interfaccia grafica che mi faccio è:
Ciò che appare la mia griglia come:
immagine: THE GRIDLAYOUT FOR THIS
Non capisco perché sto ottenendo questo risultato poiché ho disegnato un diagramma per aiutare il codice e sembra funzionare.
Il metodo addComp aggiunge aggiunge il componente di input al pannello di input in una data posizione (x, y) e ad una larghezza e altezza di un determinato componente.
Codice:
import javax.swing.*;
import java.awt.*;
public class GUIError extends JFrame {
//initialise all the components
JPanel mainPanel = new JPanel();
JTextField txtDisplay = new JTextField();
JButton btnA = new JButton("A");
JButton btnB = new JButton("B");
JButton btnC = new JButton("C");
JButton btnD = new JButton("D");
JButton btnE = new JButton("E");
JButton btnF = new JButton("F");
JButton btnWA = new JButton("WA");
JButton btnWB = new JButton("WB");
JButton btnWC = new JButton("WC");
JButton btnWD = new JButton("WD");
private void addComp(JPanel panel, JComponent comp, int xPos, int yPos, int compWidth, int compHeight) {
GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = xPos;
gridConstraints.gridy = yPos;
gridConstraints.gridwidth = compWidth;
gridConstraints.gridheight = compHeight;
gridConstraints.weightx = 0.5;
gridConstraints.weighty = 0.5;
gridConstraints.insets = new Insets(5, 5, 5, 5);
gridConstraints.anchor = GridBagConstraints.CENTER;
gridConstraints.fill = GridBagConstraints.BOTH;
panel.add(comp, gridConstraints);
}
public static void main(String[] args) {
try {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
catch (Exception e) { }
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// create frame
JFrame frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
Container c = frame.getContentPane();
// create GUI within frame
new GUIError(c);
// finish frame definition
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
});
}
public GUIError(Container cont) {
cont.setPreferredSize(new Dimension(610, 250));
// parent panel containes every other panel
mainPanel.setLayout(new GridBagLayout());
// text display
txtDisplay.setEditable(false);
addComp(mainPanel, txtDisplay, 0, 0, 12, 2); // width 16, height 2
addComp(mainPanel, btnA, 0, 2, 2, 1);
addComp(mainPanel, btnB, 2, 2, 2, 1);
addComp(mainPanel, btnC, 4, 2, 2, 1);
addComp(mainPanel, btnD, 6, 2, 2, 1);
addComp(mainPanel, btnE, 8, 2, 2, 1);
addComp(mainPanel, btnF, 10, 2, 2, 1);
addComp(mainPanel, btnWA, 0, 3, 3, 1);
addComp(mainPanel, btnWB, 3, 3, 3, 1);
addComp(mainPanel, btnWC, 6, 3, 3, 1);
addComp(mainPanel, btnWD, 9, 3, 3, 1);
cont.add(mainPanel);
}
}
GBC sono basati su colonna, +1 per domanda e SSCCE/MCVE, motivo per cui MigLayout (e.i.) sono sviluppati – mKorbel
Non pensare di poterlo fare con solo 1 pannello. 'gridwidth' non può specificare" mezza griglia "per quanto ne so. Penso che la scelta migliore sia quella di utilizzare un layout diverso o di separare i componenti in pannelli diversi (il pannello principale contiene un campo in alto e due pannelli in basso (affiancati): ciascun pannello secondario ha 2 pannelli: uno per i 3 pulsanti più piccoli, uno con i 2 pulsanti più grandi sotto di esso) –
Non ho specificato la metà di una griglia utilizzando la larghezza di griglia. La prima riga di pulsanti è gridwidth = 2 e la terza riga di pulsanti è gridwidth = 3. Non capisco cosa intendi per 3 pulsanti più piccoli e 2 più grandi in basso? La griglia che ho anche collegato mostra la griglia che ho usato in questa situazione. La seconda fila di pulsanti ha le stesse dimensioni, la terza fila di pulsanti ha le stesse dimensioni. Non capisco perché questo non funzionerebbe con GridBagLayout. – user3749872