Quantcast
Channel: OKWAVE 閲覧数の多い質問(Java/253)【本日】
Viewing all articles
Browse latest Browse all 68675

コンポーネントの再描画

$
0
0
下記のサンプルソースに示したように、レイアウトマネジャーがnullの場合には マウスドラッグでコンポーネントが再描画され、コンポーネントを移動可能なのですが、 スプリングレイアウトマネジャーを設定した同様なサンプルでは、再描画が 行われなくなります(移動はしていますが再描画されないため移動が見えません)。 スプリングレイアウトマネジャーを設定した場合には、フレームをリサイズすれば 再描画されるのですが(サンプルコード中のコメントをはずす)、repaint()等では うまくいきません。 解決策をご存知の方がおられましたら、よろしくお願い申し上げます。 import java.awt.Component; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SpringLayout; public class MouseDraggeSample { private static class NullLayoutSample extends JFrame { public NullLayoutSample() { setLayout( null ); JButton button = new JButton("Button"); button.setSize( 80, 30 ); button.setLocation( 100, 50 ); add( button ); DraggedMouseListener listener = new DraggedMouseListener(); button.addMouseListener( listener ); button.addMouseMotionListener( listener ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize( 300, 200 ); setVisible( true ); } private class DraggedMouseListener implements MouseListener, MouseMotionListener { private Point p0; public void mousePressed(MouseEvent e) { p0 = e.getPoint(); } public void mouseDragged(MouseEvent e) { Component c = (Component)e.getSource(); c.setLocation( c.getX() + e.getX() - p0.x, c.getY() + e.getY() - p0.y ); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} } } private static class SpringLayoutSample extends JFrame { public SpringLayoutSample() { SpringLayout springLayout = new SpringLayout(); setLayout( springLayout ); JButton button = new JButton("Button"); button.setSize( 80, 30 ); springLayout.putConstraint( SpringLayout.WEST, button, 100, SpringLayout.WEST, this ); springLayout.putConstraint( SpringLayout.NORTH, button, 50, SpringLayout.NORTH, this ); add( button ); DraggedMouseListener listener = new DraggedMouseListener(); button.addMouseListener( listener ); button.addMouseMotionListener( listener ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation( 300, 0 ); setSize( 300, 200 ); setVisible( true ); } private class DraggedMouseListener implements MouseListener, MouseMotionListener { private Point p0; public void mousePressed(MouseEvent e) { p0 = e.getPoint(); } public void mouseDragged(MouseEvent e) { Component c = (Component)e.getSource(); int x = c.getX() + e.getX() - p0.x; int y = c.getY() + e.getY() - p0.y; SpringLayout layout = (SpringLayout)getContentPane().getLayout(); layout.putConstraint( SpringLayout.WEST, c, x, SpringLayout.WEST, SpringLayoutSample.this ); layout.putConstraint( SpringLayout.NORTH, c, y, SpringLayout.NORTH, SpringLayoutSample.this ); //setSize( getWidth()+1, getHeight() ); // repaint()ではダメ } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} } } public static void main(String[] args) { new NullLayoutSample(); new SpringLayoutSample(); } }

Viewing all articles
Browse latest Browse all 68675

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>