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{
}
お礼
あ、なるほど…… インスタンス化するんじゃなく、 要素への参照を保持しているんですね。 助かりました、ありがとうございます!