Mit MigLayout, warum folgt eine JButton eine JTable nicht mehr reagiert und wie diese zu beheben?

StackOverflow https://stackoverflow.com/questions/2511286

Frage

Ich habe ein irrsinnig Problem in Bezug auf die Verwendung eines JButton nach einem JTable mit MigLayout. Es ist völlig unempfänglich wenn ich es nicht weit genug über die JTable drücken (dann kann es korrekt verhalten).

Ich habe versucht, den Code sowohl mit dem MigLayout JAR der Version läuft wir für Endverbraucher-Produkte verwenden und mit der sehr jüngsten; gleiches Ergebnis.

Hier ist ein Beispielcode Reproduzieren des Problems (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();
    }

}

Ich nehme an, es hat etwas mit dem Tabellenkopf und die Tabelle selbst in der gleichen Layout-Zelle enden zu tun, aber ich bin wirklich nicht sicher davon.

Wie gesagt, wenn ich den Knopf weit genug über die JTable schieben, wird es wieder funktionieren. Wenn ich es in der nächsten Zeile fallen, ist es nicht funktioniert, muss ich es nach unten eine weitere Zeile bewegen.

Die einzige Bibliothek, die Sie in Ihrem Arbeitsbereich benötigen um den Code auszuführen ist MigLayout .

Vielen Dank für Ihre Hilfe, sehr geschätzt!

M. Joanis

War es hilfreich?

Lösung

Ich glaube nicht, es ist ein MigLayout Problem, per se . Die Taste funktioniert einwandfrei, ohne die Zeile

panel.add(table.getTableHeader(), "grow");

Sie könnten versuchen, die Kopfzeile / Tisch-Kombination in einer Teilplatte Verpackung:

JPanel sub = new JPanel();
sub.add(table.getTableHeader(), "grow");
sub.add(scrollpane, "grow");
panel.add(sub);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top