J Pulsante che si espande per occupare l'intero frame / contenitore
-
10-07-2019 - |
Domanda
Ciao a tutti. Sto cercando di creare una GUI swing con un pulsante e un'etichetta su di essa. sto usando un layout di bordo e l'etichetta (nel campo nord) si presenta bene, ma il pulsante occupa il resto del riquadro (si trova nel campo centrale). qualche idea su come risolvere questo problema?
Soluzione
Devi aggiungere il pulsante a un altro pannello, quindi aggiungere quel pannello al frame.
Si scopre che BorderLayout espande qualsiasi componente sia nel mezzo
Ora il tuo codice dovrebbe apparire così:
Prima
public static void main( String [] args ) {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
JFrame frame = ...
frame.add( label, BorderLayout.NORTH );
frame.add( button , BorderLayout.CENTER );
....
}
Cambialo in qualcosa del genere:
public static void main( String [] args ) {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
JPanel panel = new JPanel();
panel.add( button );
JFrame frame = ...
frame.add( label, BorderLayout.NORTH );
frame.add( panel , BorderLayout.CENTER);
....
}
Prima / Dopo
Prima di http://img372.imageshack.us/img372/2860/beforedl1.png Dopo http://img508.imageshack.us/img508/341/aftergq7.png
Altri suggerimenti
O usa semplicemente il layout assoluto. È sul pallet dei layout.
O abilitalo con:
frame = new JFrame();
... //your code here
// to set absolute layout.
frame.getContentPane().setLayout(null);
In questo modo, puoi posizionare liberamente il controllo ovunque tu voglia.
Ancora :)
import javax.swing.*;
public class TestFrame extends JFrame {
public TestFrame() {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
Box b = new Box(BoxLayout.Y_AXIS);
b.add(label);
b.add(button);
getContentPane().add(b);
}
public static void main(String[] args) {
JFrame f = new TestFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}