GridBagConstraints problema-spostato a sinistra e la dimensione non è la stessa
-
10-10-2019 - |
Domanda
Ho in Java due pannelli che devono avere lo stesso layout, c'è mie funzioni per inizializzazioni pannelli.
private void InitializePanelCom(){
pnlCom=new JPanel();
pnlCom.setSize(300,160);
pnlCom.setLocation(10, 60);
add(pnlCom);
GridBagLayout gb=new GridBagLayout();
GridBagConstraints gc=new GridBagConstraints();
pnlCom.setLayout(gb);
jLabelcommPort = setJLabel("Com Port : ");
jLabelbaudRate = setJLabel("Baud Rate : ");
jLabelplcAddress = setJLabel("Plc Address : ");
jLabelsendTime = setJLabel("Send Time : ");
jLabelx50 = setJLabel(" x 50 ms (2 - 99)");
jComboBoxcommPort = setJComboBox(commPortList);
jComboBoxbaudRate = setJComboBox(bitRateList);
jTextAreaPlcAddress = setJTextField("");
jTextAreaSendTime = setJTextField("");
gc.insets = new Insets(10,0,0,0);
gc.ipadx = 120;
gc.weightx = 1;
gc.gridx = 0;
gc.gridy = 0;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jLabelcommPort,gc);
gc.insets = new Insets(10,0,0,0);
gc.ipadx = 120;
gc.weightx = 1;
gc.gridx = 1;
gc.gridy = 0;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jComboBoxcommPort,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=0;
gc.gridy=1;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jLabelbaudRate,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=1;
gc.gridy=1;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jComboBoxbaudRate,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=0;
gc.gridy=2;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jLabelplcAddress,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=1;
gc.gridy=2;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jTextAreaPlcAddress,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=0;
gc.gridy=3;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jLabelsendTime,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=1;
gc.gridy=3;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jTextAreaSendTime,gc);
gc.insets=new Insets(10,0,0,0);
gc.ipadx=120;
gc.weightx=1;
gc.gridx=2;
gc.gridy=3;
gc.anchor=GridBagConstraints.EAST;
pnlCom.add(jLabelx50,gc);
}
![alt text][1]
private void InitializePanelTcp(){
pnlTcp=new JPanel();
pnlTcp.setSize(300,160);
pnlTcp.setLocation(10, 60);
add(pnlTcp);
GridBagLayout gb=new GridBagLayout();
GridBagConstraints gc=new GridBagConstraints();
pnlTcp.setLayout(gb);
lblIPAddress=setJLabel("IP Address : ");
txtIPAddress=setJTextField("");
lblPort=setJLabel("Port : ");
txtPort=setJTextField("");
cmbBaudRateTCP = setJComboBox(bitRateList);
lblBaudRateTCP = setJLabel("Baud Rate : ");
lblParityCheck=setJLabel("Parity check : ");
txtParityCheck=setJTextField("");
gc.insets = new Insets(10,0,0,0);
//gc.ipadx = 20;
gc.weightx = 0.3;
gc.gridx = 0;
gc.gridy = 0;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(lblIPAddress,gc);
gc.insets = new Insets(10,0,0,0);
//gc.ipadx = 80;
gc.weightx = 0.7;
gc.gridx = 1;
gc.gridy = 0;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(txtIPAddress,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=120;
gc.weightx=0.3;
gc.gridx=0;
gc.gridy=1;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(lblPort,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=80;
gc.weightx=0.7;
gc.gridx=1;
gc.gridy=1;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(txtPort,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=120;
gc.weightx=0.3;
gc.gridx=0;
gc.gridy=2;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(lblBaudRateTCP,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=0;
gc.weightx=0.7;
gc.gridx=1;
gc.gridy=2;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(cmbBaudRateTCP,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=120;
gc.weightx=0.3;
gc.gridx=0;
gc.gridy=3;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(lblParityCheck,gc);
gc.insets=new Insets(10,0,0,0);
//gc.ipadx=0;
gc.weightx=1.7;
gc.gridx=1;
gc.gridy=3;
gc.anchor=GridBagConstraints.WEST;
pnlTcp.add(txtParityCheck,gc);
}
Il problema è che il primo pannello (initializetcp, immagine non sembra lo stesso, le etichette vengono spostati a sinistra, caselle di testo sono piccoli e brutti, è diverso). Qualcuno può aiutarmi, io sono nuovo con GridBagContsraints a tutti?
Soluzione
Di solito quando sto usando weightx o pesante, sto utilizzando anche il vincolo di riempimento: gc.fill = GridBagConstraint.Horizontal;
Ad esempio, il seguente codice renderà il componente di prendere il 50% dello spazio orizzontale disponibile.
gc.weightx = 0.5;
gc.fill = GridBagConstraint.Horizontal;
Non riesco a testare il codice in realtà, ma fare un tentativo, che dovrebbe risolvere il problema. Si dovrebbe anche cercare di chiamata pack ();. alla fine del costruttore genitore (JFrame suppongo)
Altri suggerimenti
Con una rapida occhiata, il pannello problematica ha tutte le dichiarazioni di valore ipadx è fatta come commenti. Il pannello che sembra buono non lo fa. Rimuovere le marcature // e vedere se questo aiuta:)
Hai le mie più sentite condoglianze ...