java8に移行(サポート終了に付き)
今日は、
下記の2個のソース(MainFrame、myGraphCanvas )をjava8で実行したく考えています。
注)これらは、java8以前のもので作成しましたが、サポート期限の終了を考えて、java8に
変更したいと考えています。
Q1)java8への変更についてコメント頂けますと大変、あり難いです。
Q2)java8の参考書があれば、ご紹介ください。
以上、宜しくお願いします。
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainFrame extends JFrame{
myGraphCanvas myCanvas;
MainFrame(){
JFrame frame = new JFrame();
frame.setTitle("MainFrame");
frame.setBounds(100,100,480+200,380+100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myCanvas= new myGraphCanvas(400,300);
JPanel p = new JPanel();
p.setBounds(0,0,400,300);
p.add(myCanvas);
frame.getContentPane().add(p,BorderLayout.CENTER);
JPanel p2 = new JPanel();
Button button1=new Button("button1");
button1.addActionListener(new TimButton1());
Button button2=new Button("button2");
button2.addActionListener(new TimButton1());
p2.add(button1);
p2.add(button2);
frame.getContentPane().add(p2,BorderLayout.NORTH);
JPanel p3 = new JPanel();
Button button3=new Button("button3");
Button button4=new Button("button4");
p3.add(button3);
p3.add(button4);
frame.getContentPane().add(p3,BorderLayout.WEST);
JPanel p4 = new JPanel();
Button button5=new Button("button5");
Button button6=new Button("button6");
p4.add(button5);
p4.add(button6);
frame.getContentPane().add(p4,BorderLayout.EAST);
JPanel p5 = new JPanel();
Button button7=new Button("button7");
Button button8=new Button("button8");
p5.add(button7);
p5.add(button8);
frame.getContentPane().add(p5,BorderLayout.SOUTH);
frame.setVisible(true);
}
public static void main(String[] args){
MainFrame frame=new MainFrame();
Thread th = new Thread();
th.start();
frame.setVisible(true);
try {
Thread.sleep(50);
} catch (Exception ex) {
}
System.out.println("aaaa");
for(int i=0;i<frame.myCanvas.getWidth();i++){
frame.myCanvas.data[i] = 100*Math.sin((i-frame.myCanvas.getWidth()/2+1)*Math.PI/((frame.myCanvas.getWidth())/2));
try {
Thread.sleep(5);
}
catch (Exception ex) {
}
}
System.out.println("bbbb");
}
class TimButton1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent ae){
System.out.println("TimButton1 offsetx");
myCanvas.repaint();
}
}
}
//=======================
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
class myGraphCanvas extends Canvas{
Dimension dimension;
double[] data;
myGraphCanvas(int width,int height){
setSize(width,height);
dimension = getSize();
data = new double[dimension.width];
setBackground(Color.lightGray);
for(int i=0; i<this.getWidth(); i++){
data[i]= 100*Math.sin((i-this.getWidth()/2+1)*Math.PI*4/((this.getWidth())/2));
}
}
public void paint(Graphics g){
dimension = getSize();
g.setColor(Color.black);
g.drawLine(0,dimension.height/2,dimension.width-1,dimension.height/2);
g.drawLine(dimension.width/2,0,dimension.width/2,dimension.height-1);
g.setColor(Color.blue);
for(int i=0;i<dimension.width-2;){
g.drawLine( i, (int)( -data[i] + dimension.height/2 ), i+1, (int)( -data[i+1] + dimension.height/2 ) );
i++;
try {
Thread.sleep(5);
}
catch (Exception ex) {
}
}
}
}
お礼
今回の質問をMSDN Forum Visual J# GeneralにポストしたところVisual Studioの開発チームの方から返事があり、J#のバグであることが判明しました。
補足
> コードを見ましたが、これ、.netのFormにAWTのButtonを組み込も > うとしてませんか? > .netのコンポーネントにjava.awt.eventのイベントを組み込もう > としたりしていませんか? いいえ、コードの通りAWTと.NETはそれぞれ分離させてあり、混ぜてはいません。さすがに混ぜてしまうとコンパイル自体が通らないので・・・。 また、その混同をさけるためにimportで.netのFormとRichTextBoxを明示させています。