dポイントプレゼントキャンペーン実施中!

マウスをクリックするとその座標を表示するプログラムです。
画面には常に二つの四角形が表示されていて、どこをクリックしたかによって表示が変わるというものです。
(オレンジの四角形内をクリックした場合、
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

A 回答 (1件)

豆腐になるのは文字コードの問題かな?



長方形を描くごとにいちいちグラフィックスコンテキストを取得するのはなぜだろう.
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
こういうことでしょうか?

Graphics2D g1 = (Graphics2D)this.getGraphics();
Rectangle rect = new Rectangle();
rect.setRect(50,50,200,200);
g1.setColor(Color.ORANGE);
g1.fill(rect);

Rectangle rect2 = new Rectangle();
rect2.setRect(150,350,150,150);
g1.setColor(Color.GREEN);
g1.fill(rect2);

やはりこれだけでは治りませんでした。
文字はともかく、せめて図形を常に表示させたいのですが、
具体的にどこをどうすればよいのかまったくわかりません・・・

お礼日時:2012/01/05 03:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!