解決済み

イベント処理について(文字列をクリックしてアクションをおこすことができますか?)

  • 暇なときにでも
  • 質問No.973278
  • 閲覧数280
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 92% (71/77)

質問はタイトルのとおりです。
ボタンをクリックしてイベント処理を行うことはできますが、たとえばここのサイトのように、文字列をクリックして何か処理を起こさせようかなぁと思ってもうまくいきません。

JLabelだとなにも変化しないので、多分無理何度だろうと悟りましたが、どうやったらできるのかわかりません。何かヒントで結構ですので教えてください。というかそもそもこういうことはできるのでしょうか?
ちなみにアプレットではありません。

javaを勉強し始めてそこそこの月日がたちますが、超スローペースでのお勉強な上に、もともと機会音痴なのでいつまでたっても初心者です(汗)なので、質問自体わけわからない文になっていたら、補足要求してください。一生懸命考えるのでよろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 58% (347/594)

参考程度にしてください。
「プログラミングに対する姿勢」(というか対処法というか何というか)という観点から。

■方法1 ~属性変更~

「すごく簡単」なのは、
今までふつうに

JButton b = new JButton("アニマル");

としていた箇所で、「好みに応じて」以下のメソッド

b.setMargin(new Insets(0, 0, 0, 0));
b.setBorderPainted(false);
b.setFocusPainted(false);

などをを追加する方法で、おすすめです。

「setMargin()とか、そんなの思いつかなないよ!」とお嘆きの場合は、
あきらめてJButtonをデフォルトのまま使うか、
またはsunの開発キットに付属の「APIリファレンス」に、
より親しむしかないでしょう。
(とくにswingコンポーネントは)
---

■方法2 ~派生(カスタマイズ)~

「こんなボタンじゃダメだ。これ以上のものが欲しい!」という場合は、
それなりに「自作(カスタマイズ)」する必要があります(たぶん)。
その一例を書いておきます。(※この文章の最後)

ちなみにNo.1さんの書かれた方法も、とてもおすすめで、
僕もよく使う方法です。
(※Button(JButton)のデフォルト動作が気に入らない時など。
たとえばゲームなどにおいて)

この「派生(カスタマイズ)」(と「イベント処理」)の方法・しくみが、
イマイチわかりにくい、というのであれば、
もうこれはぜひ入門書を買って、
「地道に」勉強するしかないでしょう!
(※Javaプログラミングを続けるにあたっては、
この「派生」や「イベント処理」の話は避けようがない)

またはあきらめて、方法1で手を打ちましょう。
---


■僕の「一例」。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;

public class Test extends JComponent implements ChangeListener{

 public Test() {
  FlowLayout l = new FlowLayout();
  l.setHgap(0);
  setLayout(l);
  init();
 }
 
 void init() {
  createLabel("私は");
  createButton("アニマル");
  createLabel("浜口");
 }
 
 void createLabel(String s) {
  JLabel l = new JLabel(s);
  add(l);
 }
 
 JButton getButton(String s) {
  return new MyButton(s);
 }
 
 void createButton(String s) {
  JButton b = getButton(s);
  
  add(b);
  b.addChangeListener(this);

  b.setRolloverEnabled(true);
  b.setMargin(new Insets(0, 0, 0, 0));
  b.setBorderPainted(false);
  b.setFocusPainted(false);
 }
 
 public void stateChanged(ChangeEvent e) {
  Object src = e.getSource();
  if (src instanceof MyButton) {
   ((MyButton)src).r();
  }
 }

 public static void main(String[] args) {
  JFrame f = new JFrame();
  f.setContentPane(new Test());
  f.pack();
  f.show();
 }
 
 class MyButton extends JButton{
  private boolean overed;
  private Color saved;
  private Color overedCol = Color.blue;
  
  public MyButton(String s) {
   super(s);
  }
  public void r() { 
   if (overed) {
    setForeground(saved);  
   } else {
    saved = getForeground();
    setForeground(overedCol);
   }
   overed = (overed== true) ? false: true;
  }
 }
}
お礼コメント
gente

お礼率 92% (71/77)

アドバイスありがとうございます。サンプルプログラムまでどうもです☆
sunのAPI、何度も参考のため見てるのですが、なかなか難しくて理解できません(>_<)
でも上達するためには、勉強するのみですね!

お二人のアドバイス、大変参考になりましたが、プログラムがちょっとおもしろいなと思ったので、(アニマル浜口さんがツボでした/笑)kacchannさまに20ポイント差し上げたいと思います☆ ⌒(*^-゜)b
投稿日時 - 2004-08-24 22:06:28
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 0% (0/1)

JLabelにマウスリスナーをaddして、マウスクリックイベントの処理をすれば、見た目は文字列をクリックした時に、何かが起こるっていうイベント処理ができると思いますが・・・
お礼コメント
gente

お礼率 92% (71/77)

アドバイスありがとうございます。
JLabelにマウスリスナーをaddできるのですか?
へぇ~。まったく思いつきませんでした。
質問してよかったです。
早速やってみます☆
投稿日時 - 2004-08-24 21:59:32
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ