J'ai cette Java JFrame
classe, dans laquelle je veux utiliser un Boxlayout, mais j'obtiens une erreur en disant Java.awt.AWTError: BoxLayout can't be shared
. J'en ai vu d'autres avec ce problème, mais ils l'ont résolu en créant la boîte de dialogue sur le panneau de contenu, mais c'est ce que je fais ici. Voici mon code:
class edit_dialog extends javax.swing.JFrame{
javax.swing.JTextField title = new javax.swing.JTextField();
public edit_dialog(){
setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
Votre problème est que vous créez un BoxLayout
pour un JFrame
(this
), mais que vous le définissez comme la mise en page pour un JPanel
(getContentPane()
). Essayer:
getContentPane().setLayout(
new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
J'ai aussi trouvé cette erreur en faisant ceci:
JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
Le JPanel n’est pas encore initialisé lorsqu’il passe au BoxLayout. Alors divisez cette ligne comme ceci:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
Cela fonctionnera.
Je pense qu'une chose importante à souligner parmi les réponses précédentes est que la cible de BoxLayout (le premier paramètre) doit être le même conteneur que celui auquel la méthode setLayout est appelée, comme dans l'exemple suivant:
JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
Si vous utilisez la mise en page sur un JFrame
comme:
JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
Le contrôle est en fait ajouté au ContentPane
de sorte qu'il aura l'air d'être 'partagé' entre le JFrame
et le ContentPane
Faites ceci à la place:
JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));