JShellを使ってJava2Dであそんでみました。楽しい。
Javaが初めての人はこちらもどうぞ。
JShellで始めるJava - Javaの世界を覗いてみる - Qiita
ということで、まずjavax.swing.*をimport
jshell> import javax.swing.*
JFrameを用意
jshell> var f=new JFrame("guruguru") f ==> javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden, ... tPaneCheckingEnabled=true]
そして、画像を表示するためのJLabelを用意
jshell> var label=new JLabel() label ==> javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0. ... rticalTextPosition=CENTER]
画像としてBufferedImageを用意してますが、BufferedImageまで入力して[Shift]+[Tab]からの[i]を押すとimportのおすすめが出るので[1]を押してimportします。
jshell> var image=new BufferedImage 0: 何もしない 1: import: java.awt.image.BufferedImage 選択: Imported: java.awt.image.BufferedImage
で、こんな感じでBufferedImageを用意
jshell> var image=new BufferedImage(400,300,BufferedImage.TYPE_INT_RGB) image ==> BufferedImage@5ccddd20: type = 1 DirectColorModel ... 0 yOff = 0 dataOffset[0] 0
画像はImageIconを介してIconとしてJLabelに追加します。
jshell> label.setIcon(new ImageIcon(image))
labelをJFrameに追加したら、show()で表示
jshell> f.add(label) $7 ==> javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,bo...sition=CENTER] jshell> f.show()
録画領域からはみでていたので移動
jshell> f.setLocation(20,40)
packすると画面サイズが調整されます。
jshell> f.pack()
描画を行うためにGraphics2Dを取得
jshell> var g=image.createGraphics() g ==> sun.java2d.SunGraphics2D[font=java.awt.Font[famil ... .Color[r=255,g=255,b=255]]
描画色を設定するのだけど、Colorはjava.awt.Colorなので、また[Shift]+[Tab]して[i]を押してimportを補完
jshell> g.setColor(Color 0: 何もしない 1: import: java.awt.Color 選択: Imported: java.awt.Color
ここでは赤に設定します。
jshell> g.setColor(Color.RED)
線を引いてみる
jshell> g.drawLine(20,20,300,200)
labelをrepaintすると表示されます
jshell> label.repaint()
青で四角を描く
jshell> g.setColor(Color.BLUE) jshell> g.fillRect(50,40,200,100) jshell> label.repaint()
crearRectで一旦消去
jshell> g.clearRect(0,0,400,300) jshell> label.repaint()
モアレを表示してみる。
jshell> IntStream.range(0,30).map(y->y*10).forEach(y->g.drawLine(0,y,400,300-y)) jshell> label.repaint()
画面消去
jshell> g.clearRect(0,0,400,300) jshell> label.repaint()
ここもAffineTransformで[Shift]+[Tab]を押したあと[i]を押してjava.awt.geom.AffineTransformをimportしています。
{〜}の中は;(セミコロン)で行を終わらせる必要があるので注意。
で、最後の[}]を入力したら、ぐるぐる。
jshell> for(int i=0; i< 100;++i){ ...> g.clearRect(0,0,400,300); ...> g.setTransform(AffineTransform.getRotateInstance(Math.PI*i/100,200,150)); ...> g.fillRect(0,0,400,300); ...> label.repaint(); ...> Thread.sleep(30); ...> }
最後に/listをしてぐるぐるに26というidが振られているのを確認して/26としてもう一度ぐるぐる。
Graphics2Dの使い方は、ドキュメント見て
https://docs.oracle.com/javase/jp/9/docs/api/java/awt/Graphics2D.html