Ciao a tutti, sto realizzando un'applicazione in Java utilizzando come LayoutManager il GridBagLayout. Il mio unico problema è che non so come realizzare la griglia per il programma che vedete in foto...voi come fareste? NB: mi interessa solo lo schema con la suddivisione in celle, per il resto il programma funziona alla perfezione :D
http://img16.imageshack.us/img16/5968/immaginecqh.th.png (http://img16.imageshack.us/i/immaginecqh.png/)
Direi tre righe, quattro colonne.
L'area bianca occupa una riga per quattro colonne, riempie tutta la cella e si accaparra tutto lo spazio verticale in eccesso.
Il resto occupa una cella singola. Giocando un po' con weightx e gli allineamenti riesci poi ad appoggiare i singoli componenti ai lati destro o sinistro delle rispettive celle.
ok, come l'avevo pensata io...l'unica cosa è che cliccando sul bottone si modifica il testo della JLabel che passa da ATTIVATO a DISATTIVATO e viceversa, modificando quindi la larghezza della colonna...come posso fare per evitare questo inconveniente?
fissa le dimensioni dei componenti che non vuoi che si ridimensionino (setMinimum e setMaximumSize a getPreferredSize in un ComponentAdapter).
uff, non capisco...non mi viene niente...
Una soluzione è questa:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() { start(); }
});
}
private static void fixSize(final JComponent...comps) {
for(final JComponent c : comps) {
c.setMinimumSize(c.getSize());
c.setMaximumSize(c.getSize());
c.setPreferredSize(c.getSize());
}
}
private static void start() {
class Lim extends GridBagConstraints {
Lim(int...v) {
gridx = v[0];
gridy = v[1];
gridwidth = v[2];
gridheight = v[3];
weightx = v[4];
weighty = v[5];
fill = v[6];
anchor = v[7];
}
Lim ins(int top, int left, int right, int bottom) {
insets.top = top;
insets.left = left;
insets.right = right;
insets.bottom = bottom;
return this;
}
};
final JLabel l = new JLabel("ABILITATO");
JButton b = new JButton(new AbstractAction("Cambia stato") {
@Override
public void actionPerformed(ActionEvent e) {
if("ABILITATO".equals(l.getText())) {
l.setText("DISABILITATO");
} else {
l.setText("ABILITATO");
}
}
});
JComponent c0 = b;
JComponent c1 = l;
JComponent c2 = new JLabel("X = ");
JComponent c3 = new JTextField(6);
JComponent c4 = new JLabel("Y = ");
JComponent c5 = new JTextField(6);
JComponent c6 = new JScrollPane(new JTextArea(20,30));
JPanel panel = new JPanel(new GridBagLayout());
panel.add(c0, new Lim(0, 0, 1, 1, 0, 0, Lim.NONE, Lim.CENTER));
panel.add(c1, new Lim(1, 0, 1, 1, 0, 0, Lim.NONE, Lim.CENTER).ins(0,10,0,0));
panel.add(c2, new Lim(2, 0, 1, 1, 1, 0, Lim.NONE, Lim.EAST));
panel.add(c3, new Lim(3, 0, 1, 1, 0, 0, Lim.NONE, Lim.WEST).ins(0,0,40,0));
panel.add(c4, new Lim(2, 1, 1, 1, 0, 0, Lim.NONE, Lim.EAST));
panel.add(c5, new Lim(3, 1, 1, 1, 0, 0, Lim.NONE, Lim.WEST).ins(0,0,40,0));
panel.add(c6, new Lim(0, 2, 4, 1, 1, 1, Lim.BOTH, Lim.CENTER).ins(10,0,0,0));
JFrame window = new JFrame("Test");
window.add(panel);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
window.pack();
fixSize(c3, c5);
window.setVisible(true);
}
}
Ma hai tante altre opzioni.
diavolo, non capisco come fare a mettere vicine le prime due righe
come non detto, è bastato spippolare coi pesi :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.