• 締切済み

javaで太さのない線を描きたい

javaプログラム内で、太さ0pxの線を描画するにはどうすればいいのでしょうか。 つまり’描画されない’透明な線を描画したいのですが・・・ setStrokeを用いて ((Graphics2D)g).setStroke(new BasicStroke(0)); で設定してみたのですが、どうも気を利かせて(?)細い線を描画してしまうようです。 解る方回答お願いします。

みんなの回答

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

0pxの線にする方法はすみませんがわかりません。 にしても、なぜ線を0にしたいのでしょうか? 線を書きたくないのであれば、setColorでの透過指定で代用できませんかね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaの描画の取り消し(消去)に関する質問

    毎度、お世話になります。 Q1)下記は、描画のサブルーチンですが、この中で、3個の描画(各々、A,B,C)を 行なっていますが、この内の1この描画(例えば、C)を取り消す事は可能ですか? static void drawCanvas_sub(Graphics2D g2){ BasicStroke wideStroke = new BasicStroke(3.0f); BasicStroke normalStroke = new BasicStroke(1.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 140.0d)); //A ********* g2.setStroke(normalStroke); g2.drawLine(0,100,520,100); //B *********** g2.drawRect(0, 0, 520, 380); //C ********** } 以上

    • ベストアンサー
    • Java
  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • javaのCanvasを使用する描画

    今日は! repaintからCanvasの中のpaintルーチンを起動して描画を行なっています。 (下記のプログラム参照) ボタンを押すごとに、キャンバスに違った内容の書込みを行ないます。 painルーチンが起動する度に、既に書込んだキャンバスの内容がクリヤーされて 新規にキャンバスに書込みが行われて居ると思います。 Q1)キャンバスの内容をクリヤーすることなく、既に書込んだキャンバスの内容を 残して、その上に書込む方法はありませんか? (クリヤーのための指令は、出していないと思っています) ご教授の程、宜しくお願いします。 //================================ import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; 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.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class ShapeTest1 extends JFrame{ int sw=0; myCanvasPanel myCanvas; public static void main(String[] args){ // JFrame frame = new JFrame(); ShapeTest1 frame=new ShapeTest1(); } ShapeTest1(){ JFrame frame=new JFrame(); // ShapeTest1 app = new ShapeTest1(); // frame.getContentPane().add(app); frame.setTitle("タイトル"); frame.setBounds(10, 10, 300,220); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // frame.setVisible(true); //North========================= JPanel p1=new JPanel(); myCtlPanel myCtl=new myCtlPanel(p1) ; // frame.getContentPane().add(p1,BorderLayout.SOUTH); frame.getContentPane().add(p1,BorderLayout.NORTH); //===================================== JPanel p2=new JPanel(); myCanvas=new myCanvasPanel(p2); p2.add(myCanvas); frame.getContentPane().add(p2,BorderLayout.CENTER); frame.setVisible(true); } //=========================== class myCtlPanel extends JFrame{ myCtlPanel(JPanel p){ /* //領域のサイズ設定 setSize(300,50); //領域のサイズ取得 Dimension dimension = getSize(); */ Button button1=new Button("button1"); button1.addActionListener(new TimButton1()); p.add(button1); } } class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ if(sw==0){ sw=1; } else{ sw=0; } myCanvas.repaint(); //ng System.out.println("TimButton1 sw="+sw); } } class myCanvasPanel extends Canvas{ myCanvasPanel(JPanel p){ //領域のサイズ設定 setSize(300,150); //領域のサイズ取得 Dimension dimension = getSize(); // p.add(this); } // public void paintComponent(Graphics g){ //repaint()では、起動されない public void paint(Graphics g){ //repaint()では、起動 Graphics2D g2 = (Graphics2D)g; System.out.println("Paint sw="+sw); if(sw==0){ //================================================ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); //============================================== g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } else{ g2.setPaint(Color.RED); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 140.0d)); } } } }

    • ベストアンサー
    • Java
  • javaのenumの使用方法について

    毎度、お世話になります。 javaのenumの使用方法についてお教えください。 『Test_Draw.java』ファイルで、下記の如く、msrを設定しています。 modeMSR msr=modeMSR.FRQ; そして、この設定に基づきまして、『ShapeTest1.java』ファイルのほうで、下記の如く switch(msr)を行なっていますが、msrに所定の値が設定されていないようです。 Q1)この件に関しまして、コメント頂けますと大変有難いです。 上記のそれぞれのファイルに関しましては、下記をご覧ください。 //『Test_Draw.java』====================== import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Line2D; enum modeMSR {IDL,FRQ,PLR,BUZ} enum modeDRAW {ZAHYO, CURVE} public class Test_Draw { modeMSR msr=modeMSR.FRQ; Test_Draw(){ // msr=modeMSR.FRQ; } static void subDrawA(Graphics2D g2){ // g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); //============================================== g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); System.out.println("subDrawA"); } static void subDrawB(Graphics2D g2){ //swX=0; g2.setPaint(Color.RED); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 140.0d)); System.out.println("subDrawB"); } } //『ShapeTest1.java』====================== import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ShapeTest1{ myCanvasPanel myCanvas; myCtlPanel myCtl; Test_Draw myDraw; int sw_sup=1; public static void main(String[] args){ ShapeTest1 frame=new ShapeTest1(); } ShapeTest1(){ JFrame frame=new JFrame(); frame.setTitle("タイトル"); frame.setBounds(10, 10, 300,220); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //North================================SOUTHにmyCtlPanelを配置 JPanel p1=new JPanel(); myCtlPanel myCtl=new myCtlPanel(p1, 300, 50) ; frame.getContentPane().add(p1,BorderLayout.SOUTH); //=====================================CENTERにmyCanvasPanelを配置 JPanel p2=new JPanel(); myCanvas=new myCanvasPanel(p2,300,150); frame.getContentPane().add(p2,BorderLayout.CENTER); frame.setVisible(true); } //=========================== public class myCtlPanel extends JFrame{ myCtlPanel(JPanel p, int width, int height){ //領域のサイズ設定 setSize(width,height); //領域のサイズ取得 Dimension dimension = getSize(); JButton button1=new JButton("button1"); button1.addActionListener(new TimButton1()); p.add(button1); } } public class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ sw_sup=1; myCanvas.repaint(); //ng System.out.println("actionPerformed"); } } class myCanvasPanel extends Canvas{ myCanvasPanel(JPanel p, int width, int height){ //領域のサイズ設定 setSize(width,height); //領域のサイズ取得 Dimension dimension = getSize(); //p2.add(myCanvas);の代わり、--->p.add(this) //つまり、thisはyCanvas(myCanvasPanel()のリターン)の代わりとなる。 p.add(this); } /* //======================================= public void update(Graphics g){ paint(g); } */ public void paint(Graphics g){ //repaint()では、起動 Graphics2D g2 = (Graphics2D)g; // if(sw_sup==1) return; modeMSR msr=myDraw.msr; switch(msr){ //Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException // modeMSR msr=modeMSR.IDL; // switch(msr){ case IDL: //==================================================== g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //==================================================== myDraw.subDrawA(g2); break; case FRQ: myDraw.subDrawB(g2); break; default: break; } } } //class myCanvasPanel extends Canvas{ }

    • ベストアンサー
    • Java
  • javaで描画したい

    今回もよろしくお願いします。 javaを使って描画ソフトを作成しているのですが、困っています。 javaはインストールできて、コマンドプロンプトを使ってjavaのプログラムを実行するところまではできました。 しかし、フレームを作って、パネルに円や線を描くプログラムを作ったところまではよかったのですが、作ったものを実行しても、描画された絵が出てきません。 うまく説明できないのですが、わたしの考えていたのはコマンドプロンプトでコンパイルして実行するとプログラムが絵になって出てくるという物でした。 javaのダウンロードしたものはjdk-6u24-windows-i586で、インストールして使っています。javaとしての機能はちゃんとつかえているので、問題ないはずです。テストとしてHelloを返すプログラムを書いたところHelloとちゃんと返ってきました。 Windows-Vistaを使っています。 どのように設定すれば描画したものが出てくるのでしょうか。 説明不足だと思うのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • いきなりなのですが、JavaのJDesktoppaneの上にGraph

    いきなりなのですが、JavaのJDesktoppaneの上にGraphicsで円やラインを描画することはできるでしょうか? というのも、現在Javaでマインドマップ作成ツールを開発しており、JDesktoppaneの上にJPanelやJInternalFrameを 表示させることで、マインドマップの葉の追加や葉に対するテキストの変更を行っているのですが、葉同士をつなぐ ラインを描画しようとしたところ、うまく描画することができませんでした。 ソースコード自体は以下のような感じでやろうと考えています。 panel = new JDesktopPane(); this.getContentPane().add(panel); g = panel.getGraphics(); g.setColor(Color.RED); g.drawLine(10, 10, 120, 40); panel.add(new CubeMindmapLeaf()); //ルートの葉を作成 しかし、マインドマップの葉自体はうまく表示できるのですが、ラインがうまく表示されません。 どなたかお分かりになる方がいらっしゃいましたら、ご回答のほどよろしくお願いします。

    • ベストアンサー
    • Java
  • javaでアプレットの描画が出来ない

    ものすごく初心者な質問で申し訳ありません。 jdk-1.6.0をVine linux 3.2にインストールして使用しています。 javaのソースを書いてコンパイルするなどには問題は無いのですが (今のところ) 以下のようなアプレットを試してみたところアプレットの窓は起動しますが 描画がされません。 import java.applet.Applet; import java.awt.Graphics; /* <applet code="test" width=200 height=200> </applet> */ public class test extends Applet { public void paint(Graphics g) { g.drawLine(10,10,180,110); } } 以上のコードを %javac test.java %appletviewer test.java としました。窓は起動し、アプレットが開始された、と表示されるのですが 線が見当たりません。 (ちなみに教科書にあるサンプルなので間違いがあったとしたら写し間違いです) 線が表示されるはずなんですが、表示されないのです。 まども起動するので何かJAVAを使う環境として何か細かい設定を間違って いるのかと思い質問しました。 分かる方がいらっしゃったら教えてください。

  • JAVAの文法について教えてください。

    JAVAを学習しはじめたばかりの初心者です。 下記のプログラムに関してわからないので教えてください。 下記はtest.gif画像を表示するプログラムなのですが、 イメージを表示するために import java.awt.Graphicsをインポートして、 Image im でオブジェクトを宣言するのはわかるのですが、 通常はこの後に im = new Image() のようにインスタンス化する必要があると思うのですが、 このプログラムにはありません。 なぜ不要なのでしょうか? ********************** import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; public class MyImage extends Applet{ Image im; public void init(){ im = getImage( getDocumentBase(), "test/test.gif" ); } public void paint(Graphics g){ g.drawImage( im ,10,10, this); } }

    • ベストアンサー
    • Java
  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • javaもしくはjava3Dをつかって

    最初に断っておきますが,初心者です javaもしくはjava3Dを使って正弦波をX軸Y軸の上を動かしたいのですが,うまくいきません.正弦波を表示させるところまではうまくいくのですが動かそうとするとエラーがでてしまいます.動かすプログラムが間違っているのでしょうか? 自分のやり方は線を描画して再計算して何も実行文のないwhile文で時間を稼いでもう一度描画というふうにしています.BASICではこの方法でやりました. また,表示させた画像をボタンから任意に画素数を代えて画像の2値化などができるプログラムなどは作れるでしょうか?こっちはまったくの手付かずなのですが ... どなたか,アドバイスいただける方いましたらお願いします.