java初心者です。座標取得と図形表示について
マウスをクリックするとその座標を表示するプログラムです。
画面には常に二つの四角形が表示されていて、どこをクリックしたかによって表示が変わるというものです。
(オレンジの四角形内をクリックした場合、
X:100 オレンジ
Y:100 オレンジ
のように表示します。)
ですが、私が組んでみたプログラムでは図形表示が一瞬だけになってしまいます。
また、ウインドウの大きさを動かしてみると一瞬移っては消えてしまうという状態です。
それから、「オレンジ」などの日本語表示がうまくいかず「□□□」のように表示されてしまいます。
これらの問題を解決するにはどこをどう修正したらよいでしょうか?
以下が初心者なりに組んでみたソースです。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Toolkit;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Rectangle;
import java.lang.String;
import java.lang.System;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class kadai33 extends JFrame
{
private static final long serialVersionUID = 1L;
public kadai33()
{
add(new DrawPanel());
}
public static void main(String[] args)
{
Toolkit.getDefaultToolkit().setDynamicLayout(true);
JFrame f = new kadai33();
f.setTitle("マウスの座標を表示");
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
f.setBackground(Color.WHITE);
f.setSize(400, 750);
f.setVisible(true);
}
class DrawPanel extends JPanel implements MouseListener
{
int x;
int y;
public DrawPanel()
{
setBackground(Color.white);
addMouseListener(this);
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{
x = e.getX();
y = e.getY();
repaint();
}
public void paint(Graphics g)
{
Font font=new Font("Arial",Font.PLAIN,16);
super.paintComponent(g);
//super.paint(g);
Graphics2D g1 = (Graphics2D)this.getGraphics();
Rectangle rect = new Rectangle();
rect.setRect(50,50,200,200);
g1.setColor(Color.ORANGE);
g1.fill(rect);
Graphics2D g2 = (Graphics2D)this.getGraphics();
Rectangle rect2 = new Rectangle();
rect2.setRect(150,350,150,150);
g2.setColor(Color.GREEN);
g2.fill(rect2);
Graphics2D g3 = (Graphics2D)this.getGraphics();
Rectangle rect3 = new Rectangle();
rect3.setRect(50,650,200,50);
g3.setColor(Color.BLACK);
g3.fill(rect3);
if(x>=50 && x<=250 && y>=50 && y<=250){
super.paintComponent(g);
String sx = String.format("X:%d", x);
String sy = String.format("Y :%d", y);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString(sx, 65, 670);
g.drawString(sy, 65, 690);
Graphics2D g4 = (Graphics2D)g;
g4.setFont(font);
g4.setColor(Color.WHITE);
g4.drawString("オレンジ",120,670);
g4.drawString("オレンジ",120,690);
}
if(x>=150 && x<=300 && y>=350 && y<=500){
super.paintComponent(g);
String sx = String.format("X:%d", x);
String sy = String.format("Y :%d", y);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString(sx, 65, 670);
g.drawString(sy, 65, 690);
Graphics2D g5 = (Graphics2D)g;
g5.setFont(font);
g5.setColor(Color.WHITE);
g5.drawString("グリーン",120,670);
g5.drawString("グリーン",120,690);
}
else{
super.paintComponent(g);
String sx = String.format("X:%d", x);
String sy = String.format("Y :%d", y);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString(sx, 65, 670);
g.drawString(sy, 65, 690);
Graphics2D g6 = (Graphics2D)g;
g6.setFont(font);
g6.setColor(Color.WHITE);
g6.drawString("対象外",120,670);
g6.drawString("対象外",120,690);
}
}
}
}
大変困っています。
どうかよろしくお願いいたしますm(__)m
お礼
回答ありがとうございます、解決できました。 調べはしたのですが、見付けられませんでしたので。 丹念に調べていこと思います。