zoomen aus jpanel

Löwenherz

Mitglied
Liebe Forum-Community,

ich habe ein programm geschrieben, das ein Jpanel mit mehreren interaktiven elementen (Jbuttons) und teilweise integrierte Jpanels darstellt. jetzt möchte ich gerne aus diesem jpanel zoomen, und zwar seinen gesamten inhalt. ich habe es probiert ein bufferedimage daraus zu erstellen und die scale()-methode darauf anzuwenden, leider bekomme ich nur das gerade betrachtete teil des jpanels als image zurückgegeben (und das ist auch klar, da es nur ein schnappschuss ist). deshalb dachte ich an eine funktion, die direkt aus dem jpanel zoomt, weiss aber leider noch nicht wie sowas funktioniert. kann mir jemand auf die sprünge helfen?

danke im voraus🙂
 
danke erstmal für beide antworten🙂
also ich will einfach den inhalt des panels zoomen ohne dabei die interaktion zu berücksichtigen, aber so dass der gesamte inhalt durch verschieben (scrollen) vorhanden bleibt.
N.B: zum code des JXTransformer konnte ich leider nicht gelangen 🙁
 
Java:
org.jdesktop.swinghelper.transformer;
021. 
022.import javax.swing.*;
023.import javax.swing.border.TitledBorder;
024.import javax.swing.event.ChangeEvent;
025.import javax.swing.event.ChangeListener;
026.import java.awt.*;
027.import java.awt.event.*;
028.import java.awt.geom.AffineTransform;
029.import java.util.ArrayList;
030.import java.util.List;
031.import java.util.Vector;
032. 
033./*
034.* @author Alexander Potochkin
035.*
036.* [url]https://swinghelper.dev.java.net/[/url]
037.* [url]http://weblogs.java.net/blog/alexfromsun/[/url]
038.*/
039.public class TransformerDemo extends JFrame implements ChangeListener {
040. 
041.private List<JXTransformer> transformers = new ArrayList<JXTransformer>();
042.private JSlider rotationSlider;
043.private JSlider scalingSlider;
044.private JSlider shearingSlider;
045. 
046.public TransformerDemo() {
047.super("Transformer demo");
048.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
049. 
050.JMenuBar bar = new JMenuBar();
051.JMenu lafMenu = new JMenu("LaF");
052. 
053.JMenuItem winLaf = new JMenuItem("Windows LaF");
054.lafMenu.add(winLaf);
055.winLaf.addActionListener(new ActionListener() {
056.public void actionPerformed(ActionEvent e) {
057.setLaf("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
058.}
059.});
060.JMenuItem motifLaf = new JMenuItem("Motif LaF");
061.lafMenu.add(motifLaf);
062.motifLaf.addActionListener(new ActionListener() {
063.public void actionPerformed(ActionEvent e) {
064.setLaf("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
065.}
066.});
067.bar.add(lafMenu);
068.JMenuItem metalLaf = new JMenuItem("Metal LaF");
069.lafMenu.add(metalLaf);
070.metalLaf.addActionListener(new ActionListener() {
071.public void actionPerformed(ActionEvent e) {
072.setLaf("javax.swing.plaf.metal.MetalLookAndFeel");
073.}
074.});
075. 
076.JMenu settingsMenu = new JMenu("Settings");
077.settingsMenu.setMnemonic(KeyEvent.VK_S);
078.JMenuItem item = new JMenuItem("Reset sliders", KeyEvent.VK_R);
079.item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.ALT_MASK));
080.item.addActionListener(new ActionListener() {
081.public void actionPerformed(ActionEvent e) {
082.rotationSlider.setValue(0);
083.scalingSlider.setValue(100);
084.shearingSlider.setValue(0);
085.}
086.});
087.settingsMenu.add(item);
088.bar.add(settingsMenu);
089.setJMenuBar(bar);
090. 
091.JPanel panel = new JPanel(new BorderLayout());
092.panel.add(createDemoPanel());
093.panel.add(createStressTestPanel(), BorderLayout.EAST);
094.add(new JScrollPane(panel));
095.add(new JScrollPane(createToolPanel()), BorderLayout.SOUTH);
096.pack();
097.}
098. 
099.private void setLaf(String laf) {
100.try {
101.UIManager.setLookAndFeel(laf);
102.SwingUtilities.updateComponentTreeUI(this);
103.} catch (Exception e) {
104.e.printStackTrace();
105.}
106.for (JXTransformer t : transformers) {
107.t.revalidate();
108.t.repaint();
109.}
110.}
111. 
112.private JPanel createStressTestPanel() {
113.JPanel panel = new JPanel();
114.TitledBorder titledBorder = BorderFactory.createTitledBorder("Stress test (with tooltips)");
115.titledBorder.setTitleJustification(TitledBorder.CENTER);
116.panel.setBorder(titledBorder);
117.JButton lowerButton = new JButton("Button");
118.lowerButton.setLayout(new FlowLayout());
119.lowerButton.setToolTipText("Lower button");
120.JButton middleButton = new JButton();
121.middleButton.setToolTipText("Middle button");
122.middleButton.setLayout(new FlowLayout());
123.lowerButton.add(middleButton);
124.JButton upperButton = new JButton("Upper button");
125.upperButton.setToolTipText("Upper button");
126.middleButton.add(upperButton);
127.panel.add(createTransformer(lowerButton));
128.return panel;
129.}
130. 
131.private JPanel createDemoPanel() {
132.JPanel buttonPanel = new JPanel(new GridLayout(3, 2));
133.TitledBorder titledBorder = BorderFactory.createTitledBorder("Try three sliders below !");
134.Font titleFont = titledBorder.getTitleFont();
135.titledBorder.setTitleFont(titleFont.deriveFont(titleFont.getSize2D() + 10));
136.titledBorder.setTitleJustification(TitledBorder.CENTER);
137.buttonPanel.setBorder(titledBorder);
138.JButton b = new JButton("JButton");
139.b.setPreferredSize(new Dimension(100,50));
140.buttonPanel.add(createTransformer(b));
141. 
142.Vector<String> v = new Vector<String>();
143.v.add("One");
144.v.add("Two");
145.v.add("Three");
146.JList list = new JList(v);
147.buttonPanel.add(createTransformer(list));
148. 
149.buttonPanel.add(createTransformer(new JCheckBox("JCheckBox")));
150. 
151.JSlider slider = new JSlider(0, 100);
152.slider.setLabelTable(slider.createStandardLabels(25, 0));
153.slider.setPaintLabels(true);
154.slider.setPaintTicks(true);
155.slider.setMajorTickSpacing(10);
156.buttonPanel.add(createTransformer(slider));
157. 
158.buttonPanel.add(createTransformer(new JRadioButton("JRadioButton")));
159.final JLabel label = new JLabel("JLabel");
160.label.addMouseListener(new MouseAdapter() {
161.public void mouseEntered(MouseEvent e) {
162.Font font = label.getFont();
163.label.setFont(font.deriveFont(font.getSize2D() + 10));
164.}
165. 
166.public void mouseExited(MouseEvent e) {
167.Font font = label.getFont();
168.label.setFont(font.deriveFont(font.getSize2D() - 10));
169.}
170.});
171.buttonPanel.add(createTransformer(label));
172. 
173.return buttonPanel;
174.}
175. 
176.private JXTransformer createTransformer(JComponent c) {
177.JXTransformer t = new JXTransformer(c);
178.transformers.add(t);
179.return t;
180.}
181. 
182.private JPanel createToolPanel() {
183.JPanel panel = new JPanel(new GridLayout(1, 0));
184.rotationSlider = new JSlider(-180, 180, 0);
185.rotationSlider.setLabelTable(rotationSlider.createStandardLabels(90, -180));
186.rotationSlider.setPaintLabels(true);
187.rotationSlider.setPaintTicks(true);
188.rotationSlider.setMajorTickSpacing(45);
189.rotationSlider.addChangeListener(this);
190.rotationSlider.setBorder(BorderFactory.createTitledBorder("Rotate"));
191.panel.add(rotationSlider);
192. 
193.shearingSlider = new JSlider(-10, 10, 0);
194.shearingSlider.setLabelTable(shearingSlider.createStandardLabels(5, -10));
195.shearingSlider.setPaintLabels(true);
196.shearingSlider.setPaintTicks(true);
197.shearingSlider.setMajorTickSpacing(2);
198.shearingSlider.addChangeListener(this);
199.shearingSlider.setBorder(BorderFactory.createTitledBorder("Shear"));
200.panel.add(shearingSlider);
201. 
202.scalingSlider = new JSlider(50, 150, 100);
203.scalingSlider.setLabelTable(scalingSlider.createStandardLabels(25, 50));
204.scalingSlider.setPaintLabels(true);
205.scalingSlider.setPaintTicks(true);
206.scalingSlider.setMajorTickSpacing(10);
207.scalingSlider.addChangeListener(this);
208.scalingSlider.setBorder(BorderFactory.createTitledBorder("Scale"));
209.panel.add(scalingSlider);
210.return panel;
211.}
212. 
213.public void stateChanged(ChangeEvent e) {
214.AffineTransform at = new AffineTransform();
215.at.rotate(rotationSlider.getValue() * Math.PI / 180);
216.double scale = scalingSlider.getValue() / 100.0;
217.at.scale(scale, scale);
218.double shear = shearingSlider.getValue() / 10.0;
219.at.shear(shear, 0);
220.for (JXTransformer t : transformers) {
221.t.setTransform(at);
222.}
223.}
224. 
225.public static void main(String[] args) {
226.TransformerDemo demo = new TransformerDemo();
227.demo.setSize(800, 600);
228.demo.setVisible(true);
229.}
230.}
 
Mir ist leider noch nicht klar, was du eigentlich machen willst (vielleicht ne skizze!?) aber ich denke, du fährst besser damit, die Bedienelemente (Slider, Buttons, etc.) aus dieser Zoomgeschichte zu entfernen.
Wenn du dann nur die zoombare Ausgabe deiner Daten fluffig in einem JPanel realisieren möchtest ist das schon knifflig genug. (und wie Marco schon mal erwähnte leider eine dieser Sachen, die man ständig neu macht:autsch🙂

Wie und wie gut etwas funktioniert und umgesetzt werden kann ist halt zu einem grossen Teil schon vom Konzept abhängig. Ich denke, du tust gut darann, nochmal das Reißbrett zu quälen😉

Gruß Vanny
 

Zurück
Oben