J'ai un problème époustouflant concernant l'utilisation d'un JButton suite à un JTable avec MigLayout. Il ne répond absolument pas à moins que je le pousse assez loin après le JTable (alors il peut se comporter correctement).En utilisant MigLayout, pourquoi un JButton suite à un JTable ne répond pas et comment résoudre ce problème?
J'ai essayé d'exécuter le code avec le JAR MigLayout de la version que nous utilisons pour les produits des utilisateurs finaux et avec le plus récent; même résultat.
Voici un exemple de code à reproduire le problème (Main.java):
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class Main extends JFrame {
private JPanel panel;
private JTextField textField;
private JButton chooseButton;
private JTable table;
private JButton reloadButton;
private final DefaultTableModel model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
public Main() {
panel = new JPanel(new MigLayout("debug", "[][grow][]"));
setContentPane(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
/*** First row ***/
// "File:"
panel.add(new JLabel("File:"));
// textField for filename
textField = new JTextField("No file selected yet!");
textField.setEditable(false);
panel.add(textField, "growx");
// "Choose..." button
chooseButton = new JButton("Choose...");
panel.add(chooseButton, "wrap, sg buttons");
/*** Second row ***/
panel.add(new JLabel());
table = new JTable(model);
model.setColumnIdentifiers(new String[] {"col title"});
JScrollPane scrollpane = new JScrollPane(table);
Dimension scrollpaneDimension = new Dimension(125, 110);
scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
table.setPreferredScrollableViewportSize(scrollpaneDimension);
table.setFillsViewportHeight(true);
panel.add(table.getTableHeader(), "grow");
panel.add(scrollpane, "grow");
reloadButton = new JButton("Reload");
panel.add(reloadButton, "top, wrap, sg buttons");
pack();
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
Je suppose qu'il a quelque chose à voir avec l'en-tête de table et la table elle-même se retrouver dans la même cellule de mise en page, mais je Je ne suis pas vraiment sûr de ça. Comme je l'ai dit, si je pousse le bouton assez loin après le JTable, il va fonctionner à nouveau. Si je le laisse tomber sur le rang suivant, ça ne marche pas, je dois le descendre d'une rangée de plus.
La seule bibliothèque dont vous avez besoin dans votre espace de travail pour exécuter le code est MigLayout.
Merci à tous pour votre aide, très appréciée!
M. Joanis
Le problème n'aurait rien à voir avec MigLayout, désolé mig! – Joanis