アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

A 回答 (2件)

参考程度にしてください。


「プログラミングに対する姿勢」(というか対処法というか何というか)という観点から。

■方法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;
  }
 }
}
    • good
    • 0
この回答へのお礼

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

お二人のアドバイス、大変参考になりましたが、プログラムがちょっとおもしろいなと思ったので、(アニマル浜口さんがツボでした/笑)kacchannさまに20ポイント差し上げたいと思います☆ ⌒(*^-゜)b

お礼日時:2004/08/24 22:06

JLabelにマウスリスナーをaddして、マウスクリックイベントの処理をすれば、見た目は文字列をクリックした時に、何かが起こるって

いうイベント処理ができると思いますが・・・
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
JLabelにマウスリスナーをaddできるのですか?
へぇ~。まったく思いつきませんでした。
質問してよかったです。
早速やってみます☆

お礼日時:2004/08/24 21:59

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