import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities; public class TestScroll extends JApplet { private static final long serialVersionUID = 5422999913265609803L; private JButton buttonDraw = null; private JButton buttonClear = null; private JCanvas canvas = null; public void init() { final JPanel contentPane = (JPanel) getContentPane(); final JPanel buttons = new JPanel(); buttons.setLayout(new FlowLayout(FlowLayout.LEFT)); buttons.add(getButtonDraw()); buttons.add(getButtonClear()); contentPane.add(buttons, BorderLayout.NORTH); final JScrollPane scroll = new JScrollPane(getCanvas()); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); contentPane.add(scroll, BorderLayout.CENTER); final ButtonActions actions = new ButtonActions(this); getButtonClear().addActionListener(actions); getButtonDraw().addActionListener(actions); } public JCanvas getCanvas() { if (canvas == null) { canvas = new JCanvas(); canvas.draw();// on fait un ptit paint pour la route } return canvas; } public JButton getButtonDraw() { if (buttonDraw == null) { buttonDraw = new JButton(); buttonDraw.setText("Draw"); } return buttonDraw; } public JButton getButtonClear() { if (buttonClear == null) { buttonClear = new JButton(); buttonClear.setText("Clear"); } return buttonClear; } } class JCanvas extends JPanel { private static final long serialVersionUID = 2875640105363885805L; private static final Ellipse2D.Double CIRCLE = new Ellipse2D.Double(50, 50, 400, 400); private boolean clear = true; public JCanvas() { // force le JScrollPane à recalculer la taille du viewport // ici je me foule pas et j'utilise des valeurs fixes setPreferredSize(new Dimension(800, 600)); } public void paintComponent(final Graphics g) { g.clearRect(0, 0, getWidth(), getWidth()); if (!clear) { final Graphics2D g2 = (Graphics2D) g; g2.setColor(new Color(0xFF, 0x00, 0x00, 0x7F));// rouge avec chanel // alpha g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // lissage de l'ellipse g2.fill(CIRCLE); g2.dispose(); } } public void draw() { clear = false; repaint(); } public void clear() { clear = true; repaint(); } } class ButtonActions implements ActionListener { private TestScroll adaptee = null; public ButtonActions(final TestScroll adaptee) { this.adaptee = adaptee; } public void actionPerformed(final ActionEvent e) { final Object o = e.getSource(); SwingUtilities.invokeLater(new Runnable() { public void run() { if (o.equals(adaptee.getButtonDraw())) { final JCanvas canvas = adaptee.getCanvas(); canvas.draw(); } else if (o.equals(adaptee.getButtonClear())) { final JCanvas canvas = adaptee.getCanvas(); canvas.clear(); } } }); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question