![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
マウスをクリックするとその座標を表示するプログラムです。
画面には常に二つの四角形が表示されていて、どこをクリックしたかによって表示が変わるというものです。
(オレンジの四角形内をクリックした場合、
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
No.1ベストアンサー
- 回答日時:
豆腐になるのは文字コードの問題かな?
長方形を描くごとにいちいちグラフィックスコンテキストを取得するのはなぜだろう.
回答ありがとうございます!
こういうことでしょうか?
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);
やはりこれだけでは治りませんでした。
文字はともかく、せめて図形を常に表示させたいのですが、
具体的にどこをどうすればよいのかまったくわかりません・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
importするには java.io.*; imp...
-
「例外 *** は対応する try 文...
-
createImage()を使い コンパイル
-
c:importタグ内に、変数をセッ...
-
ラムダ式 comparing(e->e.getVa...
-
Androidで画面遷移ができません.
-
<forEach> 内で供給された "ite...
-
NetBeansによる画像の表示
-
シャットダウンフックが呼ばれない
-
jFrameを使って複数の画面を生...
-
Chorometerで一時停止した後再...
-
eclipseに記述したjavaファイル...
-
アーティスト名リストを取得す...
-
Javaを使ってデジタル時計を作...
-
(急募)JavaカレンダーをGUI可に...
-
javaで画像を回転縮小
-
テストケースが上手くいきません。
-
ファイル名を動的に生成したい
-
はじめてのjavaのソース解析
-
setAttribute(String, int)は適...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
文字列を数式に
-
シャットダウンフックが呼ばれない
-
Javaで常駐するソフトを作って...
-
フレームの×ボタンを押しても閉...
-
Selenium IDEでexportしたコー...
-
文字サイズが可変のラベル
-
jFrameを使って複数の画面を生...
-
【java】検索フォームの検索結...
-
Java での グローバルIP取得
-
(急募)JavaカレンダーをGUI可に...
-
ファイル名を動的に生成したい
おすすめ情報