[java初心者です]ボタンのイベントの追加
javaで、複数ボタンを表示し、クリックするとそれぞれのダイアログが表示されるプログラムを作っています。
サンプルを利用して、ボタンを追加するところまで出来たのですが
そこからがうまくできません。
アクションリスナーがthisにしてあるため、どのボタンでも
同じダイアログが表示されてしまうのだと思いますが、
this以外にすることはできるのでしょうか?
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
public class JOptionPaneTest8 extends JFrame implements ActionListener{
JLabel ansLabel;
public static void main(String[] args){
JOptionPaneTest8 frame = new JOptionPaneTest8();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 300, 200);
frame.setTitle("タイトル");
frame.setVisible(true);
}
JOptionPaneTest8(){
JButton ichiButton = new JButton("○○○な時");
ichiButton.addActionListener(this);
JButton niButton = new JButton("○○●な時");
niButton.addActionListener(this);
JPanel p = new JPanel();
p.add(ichiButton);
p.add(niButton);
ansLabel = new JLabel("今の気分をクリック!");
JPanel ansPanel = new JPanel();
ansPanel.add(ansLabel);
getContentPane().add(p, BorderLayout.CENTER);
getContentPane().add(ansPanel, BorderLayout.PAGE_END);
}
public void actionPerformed(ActionEvent e){
ImageIcon icon = new ImageIcon("aka.gif");
int option = JOptionPane.showConfirmDialog(this, "赤を身の回りに置いて元気に!",
"OK?", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE, icon);
if (option == JOptionPane.YES_OPTION){
ansLabel.setText("ほかには?");
}else if (option == JOptionPane.NO_OPTION){
ansLabel.setText("今の気分をクリック!");
}
}
気分をボタンとして表示して
そのボタンをクリックすると効果的な色のアイコン(gif)と解決策?を
ダイアログとして表示させたいです。
高校でついこの間javaを始めた初心者です(>_<)
提出期限が近づいていて焦っています;
お手数ですが回答お願いいたします・・・!!
お礼
ありがとうございます! コンポーネントを用意することになってしまいましたが、できました! 確かに、一度フォーカスを失うとそれきりですね。 ちょっと工夫して、フォーカスを再度失えるようにしました。 動作スピードは遅いですけど、自分が満足できるレベルのものにはなりました。 以下のようにしました。 import java.awt.AWTException; import java.awt.Container; import java.awt.MouseInfo; import java.awt.Point; import java.awt.PointerInfo; import java.awt.Robot; import java.awt.event.FocusListener; import java.awt.event.FocusEvent; import java.awt.event.InputEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class FocusListenerTest02 { public static void main( String[] args ) { JFrame jFrame = new JFrame( "フォーカスロストによるマウスポジションゲット" ); jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); jFrame.setBounds( 0, 0, 100, 100); JPanel jPanel = new JPanel(); JTextField jTextField02 = new JTextField( "" ); jTextField02.addFocusListener( new Listner02( "" ) ); jPanel.add( jTextField02 ); Container container = jFrame.getContentPane(); container.add( jPanel ); jFrame.setVisible( true ); } } class Listner02 implements FocusListener { private String name = ""; public Listner02( String name ) { this.name = name; } public void focusGained( FocusEvent e ) { System.out.println( "focusGained() : " + name ); } public void focusLost(FocusEvent e) { System.out.println( "focusLost() : " + name ); PointerInfo a = MouseInfo.getPointerInfo(); Point b = a.getLocation(); int x = (int) b.getX(); System.out.println(x + ":" + y); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); } try { Robot robot02 = new Robot(); robot02.mouseMove(50, 50); robot02.mousePress(InputEvent.BUTTON1_MASK);// 左クリック robot02.mouseRelease(InputEvent.BUTTON1_MASK);// クリック離す robot02.mousePress(InputEvent.BUTTON1_MASK);// 左クリック robot02.mouseRelease(InputEvent.BUTTON1_MASK);// クリック離す robot02.mouseMove(x, y); } catch (AWTException e1) { e1.printStackTrace(); } } }