Ich habe einen JFrame, der eine Tabelle mit Zeilen- und Spaltenüberschriften enthält. Meine Tabelle ist eine benutzerdefinierte Komponente aus 3 Bereichen (Zeilenkopf, Spaltenkopf und Raster). Die Panels sind normale JPanels, die entweder JButton oder JLabel enthalten, in einem MigLayout. Ich zeige diese Komponente in einem JScrollPane an, um gleichzeitig mein Raster und meine Header zu scrollen. Dieser Teil funktioniert gut.Zoom auf ein JScrollPane mit Kopfzeilen
Jetzt sollte der Benutzer in der Lage sein, auf meine Komponente zu zoomen.
Ich habe versucht, die Pbjar JXLayer zu verwenden, aber wenn ich meine ganze JScrollPane in die Ebene einfügen, wird alles gezoomt, Ereignis die Bildlaufleisten.
Ich habe versucht, 3 JXLayers zu verwenden, einen für jeden viewPort meiner JScrollPane. Aber diese Lösung ist nur ein Fehler in meinem Layout, da die Panels innerhalb der ViewPorts zentriert werden, anstatt dass sie von oben nach links ausgerichtet sind.
import org.jdesktop.jxlayer.JXLayer;
import org.pbjar.jxlayer.demo.TransformUtils;
import org.pbjar.jxlayer.plaf.ext.transform.DefaultTransformModel;
public class Matrix extends JScrollPane {
private Grid grid;
private Header rowHeader;
private Header columnHeader;
private DefaultTransformModel zoomTransformModel;
private double zoom = 1;
public Matrix() {
super(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
this.zoomTransformModel1 = new DefaultTransformModel();
this.zoomTransformModel1.setScaleToPreferredSize(true);
this.zoomTransformModel1.setScale(1);
this.zoomTransformModel2 = new DefaultTransformModel();
this.zoomTransformModel2.setScaleToPreferredSize(true);
this.zoomTransformModel2.setScale(1);
this.zoomTransformModel3 = new DefaultTransformModel();
this.zoomTransformModel3.setScaleToPreferredSize(true);
this.zoomTransformModel3.setScale(1);
this.grid = new Grid();
this.setViewportView(TransformUtils.createTransformJXLayer(this.grid,
zoomTransformModel1););
this.matrixRowHeader = new Header(Orientation.VERTICAL);
this.setRowHeader(new JViewport(
TransformUtils.createTransformJXLayer(
this.rowHeader, zoomTransformModel2)));
this.matrixColumnHeader = new Header(Orientation.HORIZONTAL);
this.setColumnHeader(new JViewport(
TransformUtils.createTransformJXLayer(
this.columnHeader, zoomTransformModel2)));
}
public void setScale(double scale) {
this.zoomTransformModel1.setScale(scale);
this.zoomTransformModel2.setScale(scale);
this.zoomTransformModel3.setScale(scale);
}
}
Wie kann ich den Zoom auf meinem JScrollPane behandeln, ohne auf den Bildlaufleisten ein- und ohne mein Layout vermasselt?