ajouter le composant scrollpane à un composite lorsque le panneau est plein (java)
Je suis en train de travailler sur java swing application et je suis ajoutant des composants dynamiquement dans un JPanel
. Je veux mettre un JScrollPane
sur ce panneau et seulement si le groupe est complet, nous pouvons voir ce composant scrollpane.
Comment puis-je faire sur cette :
package add_button;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class MyExample
{
//Field members
static JPanel panel = new JPanel();
static Integer indexer = 1;
static List<JLabel> listOfLabels = new ArrayList<JLabel>();
static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
public static void main(String[] args)
{
//Construct frame
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.setPreferredSize(new Dimension(990, 990));
frame.setTitle("My Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Frame constraints
GridBagConstraints frameConstraints = new GridBagConstraints();
//Construct button
JButton addButton = new JButton("Add");
addButton.addActionListener(new ButtonListener());
//Add button to frame
frameConstraints.gridx = 0;
frameConstraints.gridy = 0;
frame.add(addButton, frameConstraints);
//Construct panel
panel.setPreferredSize(new Dimension(600, 600));
panel.setLayout(new GridBagLayout());
panel.setBorder(LineBorder.createBlackLineBorder());
//Add panel to frame
frameConstraints.gridx = 0;
frameConstraints.gridy = 1;
frameConstraints.weighty = 1;
frame.add(panel, frameConstraints);
//Pack frame
frame.pack();
//Make frame visible
frame.setVisible(true);
}
static class ButtonListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0)
{
//Clear panel
panel.removeAll();
//Create label and text field
JTextField jTextField = new JTextField();
jTextField.setSize(100, 200);
listOfTextFields.add(jTextField);
listOfLabels.add(new JLabel("Label " + indexer));
//Create constraints
GridBagConstraints textFieldConstraints = new GridBagConstraints();
GridBagConstraints labelConstraints = new GridBagConstraints();
//Add labels and text fields
for(int i = 0; i < indexer; i++)
{
//Text field constraints
textFieldConstraints.gridx = 1;
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
textFieldConstraints.weightx = 0.5;
textFieldConstraints.insets = new Insets(10, 10, 10, 10);
textFieldConstraints.gridy = i;
//Label constraints
labelConstraints.gridx = 0;
labelConstraints.gridy = i;
labelConstraints.insets = new Insets(10, 10, 10, 10);
//Add them to panel
panel.add(listOfLabels.get(i), labelConstraints);
panel.add(listOfTextFields.get(i), textFieldConstraints);
}
//Align components top-to-bottom
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = indexer;
c.weighty = 1;
panel.add(new JLabel(), c);
//Increment indexer
indexer++;
panel.updateUI();
}
}
}
essayez de la mine de son travail ..
a) ne pas appeler setXXSize, jamais: stackoverflow.com/questions/7229226/... b) n'utilisez pas de updateUI dans le code de l'application c) ne pas utiliser setSize: à la fois la localisation et de dimensionnement est la seule tâche de la LayoutManager, dans votre cas, la GridBag, à l'appel n'a aucun effet
a) ne pas appeler setXXSize, jamais: stackoverflow.com/questions/7229226/... b) n'utilisez pas de updateUI dans le code de l'application c) ne pas utiliser setSize: à la fois la localisation et de dimensionnement est la seule tâche de la LayoutManager, dans votre cas, la GridBag, à l'appel n'a aucun effet
OriginalL'auteur Adel Bachene | 2012-08-12
Vous devez vous connecter pour publier un commentaire.
Ici, vous allez
J'ai créé un JScrollPane, a ajouté
panel
que ses composants et ensuite ajoutéscrollPane
àframe
Ici
obtenu ce, je vais prendre soin de ce que dans l'avenir, je vous remercie de partager un tel élément précieux de la connaissance.
OriginalL'auteur Harmeet Singh
Ajouter panneau en JScrollPane, mais de créer ScrollPane par cette constractor
JScrollPane scrollPane = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
);Les barres de défilement est devenu visible uniquement lorsque la taille de l'écran est devenu plus grand que les parents de la taille des composants.
Que voyez-vous? Les barres de défilement apparaissent immédiatement?
pas de Barres de défilement à tous
Ajoutez-vous JScrollPane à l'image? Voir les réponses ci-dessous comment le faire.
merci monsieur ^^
OriginalL'auteur Nestor
Sur vous jscrollpane vous devez définir verticale et horizontale de la barre de régimes. par exemple
espère que ça va vous aider. si vous êtes face à tout problème, alors vous pouvez demander, je vais essayer de le résoudre.
OriginalL'auteur Bharat Sharma