tekebonのプロフィール

@tekebon tekebon
ありがとう数55
質問数1
回答数98
ベストアンサー数
36
ベストアンサー率
62%
お礼率
100%

  • 登録日2002/09/06
  • 長方形を描いて、それを移動させるアップレット

    Javaアップレットについて質問です。マウスをドラッグすると、マウスによって指定した位置に長方形を描き、Shiftキーを押したまま描かれた長方形の内部でドラッグすると、マウスを移動した距離だけ長方形を移動させる、というプログラムを作りたいのですが Shiftキーを押したまま長方形の内部でドラッグすると、描いた長方形が消えてしまいます。 どうしていいかわからないので、改善点がありましたら教えてください。 なお、最初に長方形を描くところはできています。 プログラムは以下のとおり import java.awt.*; import java.applet.*; import java.awt.event.*; public class ex1123 extends Applet implements MouseListener, MouseMotionListener{ //Shiftキーを押しているかどうか boolean isS = false; //マウスが長方形の内部に入っているかどうか boolean enter = false; //長方形 Rectangle r1 = new Rectangle(0,0,0,0); //Shiftキーを押したまま、マウスを押した位置と離した位置 Point p1; Point p2; public void init(){ addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g){ if(!r1.isEmpty()){ if(isS){ //マウスが長方形の内部にはいっていたら移動させる if(enter){ //長方形の始点を移動させる r1.x = r1.x + (p2.x - p1.x); r1.y = r1.y + (p2.y - p1.y); g.drawRect(r1.x, r1.y, r1.width, r1.height); } } else{ g.drawRect(r1.x, r1.y, r1.width, r1.height); } } } public void mousePressed(MouseEvent e){ r1.setLocation(e.getPoint()); r1.setSize(0,0); if((e.getModifiersEx() & MouseEvent.SHIFT_DOWN_MASK) == MouseEvent.SHIFT_DOWN_MASK){ isS = true; //マウスが長方形の内部に入っているかどうか enter = r1.contains(e.getPoint()); if(enter){ //p1はマウスを押した位置, p2はnull p1 = e.getPoint(); p2 = null; } } else{ isS = false; } repaint(); } public void mouseDragged(MouseEvent e){ //マウスの位置 1if(enter) p2 = e.getPoint(); //最初に描く長方形のサイズを決める r1.setSize(Math.abs(e.getX() - r1.x), Math.abs(e.getY() - r1.y)); repaint(); } public void mouseReleased(MouseEvent e){ //マウスを離す位置を指定 if(enter) p2 = e.getPoint(); //最初に描く長方形のサイズを決める r1.setSize(Math.abs(e.getX() - r1.x), Math.abs(e.getY() - r1.y)); repaint(); } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} }

    • ベストアンサー
    • Java
  • java repaint()に関して

    プログラムで以下のpaintComponents内のデバックができません。 理由は一体何なのでしょうか? お願いします。 import java.awt.Graphics; import javax.swing.JPanel; public class MainPanel extends JPanel implements Runnable { Thread th; public MainPanel() { super(); } public void movestart() { th = new Thread(this); th.start(); } public void paintComponent(Graphics g) { System.out.println("このデバックができない"); super.paintComponent(g); } public void run() { while (true) { System.out.println("ここのデバックはできている"); repaint(); try { th.sleep(100); } catch (Exception e) { } } } }

    • ベストアンサー
    • Java
  • java でソケット通信をするとき

    javaでソケット通信をするとき、 //データ受け取り byte[] buffer = new byte[2048]; try { int size = 0; while (size <= 0) { size = is.read(buffer); } receiveStr = new String(buffer, 0,size, "UTF8"); } catch (IOException e) { e.printStackTrace(); } のようにしていますが、これだと文字数にして一度におくれる容量はどのくらいでしょうか? また、それらを増やすにはどうしたらいいでしょうか?

    • ベストアンサー
    • Java
  • JFrame の再表示を禁止したい。

    親ウィンドウのボタンを押して、子ウインドウが表示される仕組みなのですが、1 つ表示した後は、 表示させないようにしたいと考えコードを組みましたが、以下コードでは、null 例外が出てしまいます。 良い方法はありませんでしょうか? みなさん、どうぞよろしくお願い致します。 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class FramesTest { public static void main(String[] args) { JFrame frameMain = new JFrame("Main"); frameMain.setSize(256, 128); frameMain.getContentPane().add( new BT() ); frameMain.setVisible(true); } } class BT extends JPanel implements ActionListener { /** * */ private static final long serialVersionUID = 1L; /*-------------------------* * Variables. * *-------------------------*/ static String cmdName; static JButton button; static JFrame subJFrame; /*-------------------------* * Methods. * *-------------------------*/ BT() { super( new BorderLayout() ); button = new JButton("button"); button.addActionListener(this); add( button ); setPreferredSize(new Dimension(320, 100)); } void createFrame() { subJFrame = new JFrame( "sub" ); subJFrame.setVisible(true); subJFrame.setSize(256, 128); } @Override public void actionPerformed(ActionEvent e) { cmdName = e.getActionCommand(); if ("button".equals(cmdName)) { if ( !subJFrame.isActive() ) { createFrame(); } } } }

    • ベストアンサー
    • Java
    • yuki-01
    • 回答数1
  • 線の太さを変える コードのエラの意味が分かりません

     java勉強中の初心者です、宜しくお願いします。  下のようなコードを書きましたが、  >DrawPanel dp = new DrawPanel( X1 , Y1 , X2 , Y2 ) ;  >g2.setStroke( の二か所でエラーが出ています。 (エラーの内容はよく理解できません。) 一体どこが間違っているのでしょうか宜しくお願いします。 ================================================================= public class drawLine extends JApplet { int X1 = 20 , Y1 = 20 , X2 = 150 , Y2 = 150 ; public void init() { DrawPanel dp = new DrawPanel( X1 , Y1 , X2 , Y2 ) ; // dp.setSize( 30 , 200 ) ; // dp.setBackground( Color.cyan ) ; this.add( dp ) ; this.setBounds( 10 , 10 , 400 , 400 ) ; this.setBackground( Color.cyan ) ; this.setVisible( true ) ; } } //======================================================= class DrawPanel extends JPanel { Float currentWidth = 20.0f ; int x1 , y1 , x2 , y2 ; public DrawPanel( int x1 , int y1 , int x2 , int y2 ) { this.x1 = x1 ; this.y1 = y1 ; this.x2 = x2 ; this.y2 = y2 ; Graphics2D g2 = (Graphics2D)this.getGraphics() ; g2.setStroke ( new BasicStroke ( currentWidth , BasicStroke.CAP_ROUND , BasicStroke.JOIN_MITER ) ) ; g2.setColor( Color.red ) ; g2.drawLine( x1 , y1 , x2 , y2 ) ; } } ==============================================================================