Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Hi,
ich glaube nicht, dass das was Du machen möchstest in dieser Weise möglich ist, oder ich habe es immer noch nicht verstanden.
Wenn Du eine Art Lupe einbauen willst, hat das immer den Nachteil, dass einige Pixel nicht zu sehen sein werden. Ich denke, Du kannst das Problem nur durch Achsen lösen, die nicht homogen skalier sind, sondern so wie in meinem letzten Post beschrieben.
Das heißt, dass Du nahe bei den Achsen eine andere Einteilung hast, als in größerer Entfernung zu den Achsen.
Das würde das Problem der Hervorherbung lösen, aber zwei neue schaffen:
1. Du hättest 9 Bereiche mit verschiedenen Transformationen
2. Die Kurven wären optisch verzerrt.
Warum kannst Du kein Ausschnittsfenster für den inneren Bereich machen. dann wärst Du doch alle Probleme los?
Erzähl doch mal was zum Hintergrund, vielleicht ist es dann besser zu verstehen.
import javax.swing.JPanel;
abstract public class ScalablePanel extends JPanel
{
abstract public void setScaling(double zoomFactor);
}
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Lizens: hmm... total frei: tuhe was immer Du willst damit, aber schade niemanden!</p>
* @author Malte Kempff
* @version 1.0
*/
public class ScalingPanel extends JPanel implements MouseWheelListener
{
private BorderLayout m_borderLayout1 = new BorderLayout();
private JSlider m_zoomSlider = new JSlider();
private JScrollPane m_scrollPanel = new JScrollPane();
private ScalablePanel m_scalablePanel;
public ScalingPanel()
{
try
{
jbInit();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
private void jbInit() throws Exception
{
this.setLayout(m_borderLayout1);
m_zoomSlider.setOrientation(JSlider.VERTICAL);
m_zoomSlider.addChangeListener(new javax.swing.event.ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
zoom();
}
});
this.add(m_zoomSlider, BorderLayout.WEST);
this.add(m_scrollPanel, BorderLayout.CENTER);
m_zoomSlider.setMaximum(500);
m_zoomSlider.setMinimum(5);
}
public void zoom()
{
if (m_scalablePanel!=null)
{
double zoomFaktor = (double)m_zoomSlider.getValue()/(double)100;
m_scalablePanel.setScaling(zoomFaktor);
Dimension d = m_scalablePanel.getPreferredSize();
m_scrollPanel.getVerticalScrollBar().setMaximum(d.width);
m_scrollPanel.getHorizontalScrollBar().setMaximum(d.height);
}
// m_scrollPanel.getVerticalScrollBar().setBlockIncrement(100);
// m_scrollPanel.getHorizontalScrollBar().setBlockIncrement(100);
}
public ScalablePanel getScalablePanel()
{
return m_scalablePanel;
}
public void setScalablePanel(ScalablePanel scalabePanel)
{
if (m_scalablePanel!=null)
{
m_scalablePanel.removeMouseWheelListener(this);
}
m_scalablePanel = scalabePanel;
m_scrollPanel.getViewport().add(m_scalablePanel, null);
m_scalablePanel.addMouseWheelListener(this);
zoom();
}
/**
* @see java.awt.event.MouseWheelListener#mouseWheelMoved(java.awt.event.MouseWheelEvent)
*/
public void mouseWheelMoved(MouseWheelEvent e)
{
m_zoomSlider.setValue(m_zoomSlider.getValue()+e.getWheelRotation()*10);
}
}
SomeScalablePanel myScalablePanel = new SomeScalablePanel()
ScalingPanel newPane = new ScalingPanel();
newPane.setScalablePanel(myScalablePanel);
Also die Idee der nicht homogenen Einteilungen, ein Anwendungsbeispiel wäre sogenanntes Logarithmuspaier, halte ich nicht für ganz unkritisch, da es hier vom Anwendungsfall abhängt, ob man solche "optischen Verzerrungen" wirklich haben will oder eben doch lieber homogene Einteilungen möchte. Als Anwendungsentwickler würde ich dies ohne den betroffenen User/Kunden/Anforderer zu fragen nicht selbstständig einführen.
Aber das das nicht geht ist dir schon klar oder. Die Darstelllung sollte ja linear sein sonst bringt diese ja gar nichts. Also das was du willst würde ich mit einer Lupe machen so wie vorgeschlagen.
Aber das das nicht geht ist dir schon klar oder. Die Darstelllung sollte ja linear sein sonst bringt diese ja gar nichts.