2016-05-07 12 views
0

これに答えるのは混乱するかもしれませんが、私は自分の質問を最良の方法で入れようとします。私はjdbcとguiで作業しています。基本的には、私のSQLデータベースから受け取った特定のデータを(ボタン形式で)表示したいと思います。私は、データを正しく取得し、ボタンの配列に名前として入れることができます。言い換えれば、私はデータベースから受け取った異なる名前/テキストのボタンのArrayListを持っています。したがって、私は実際にデータが動的に入力されるので、ボタンの配列を作る必要があります。私の問題は、私はどのようにそれぞれのボタンにactionListenerを作成するのか混乱しているということです。各ボタンをクリックするたびに、その名前に関連付けられた値を表示する必要があります。私は、少なくともボタンの名前をactionListenerメソッド(またはAction Event Handler)に渡す方法を知りません。わかりにくい場合は、ここにボタンのコードがあります。各ボタンにactionListenerを追加する方法

todayTaskButton.add(new JButton(taskForToday.get(i))); 
todayTaskButton.get(i).setPreferredSize(new Dimension(300,75)); 
todayTaskButton.get(i).setBackground(Color.GRAY); 
todayTaskButton.get(i).setFont(new Font("Century Gothic",Font.PLAIN,30)); 
todayTaskButton.get(i).setForeground(Color.WHITE); 
todayTaskButton.get(i).setFocusable(false); 

あなたがたActionListenerに、ボタンの名前を渡す必要はありませんので、多くの

答えて

1

を正直なところ、あなたがこれを達成かもしれないので、多くの方法がありますが、問題が選んでいますあなたのための正しいもの...

これは動作しますが、それはコードが本当に厄介なことができます

todayTaskButton.get(i).addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     //... 
    } 
}); 

、あなたもまだ戻って、いくつかの中のボタンにアクションをマップする方法を必要とするたびに、あなたにそれらを作成し、各ボタンの匿名クラスを作成します。あなたはあなたが使用できるボタンのリストを

を可能性が反復気にしない場合actionCommandプロパティを使用したりsourceプロパティを使用して行うことができる方法、...

ためActionListenerを実装して目的のビルドクラスを作成します。各ボタンは、おそらく何らかの種類の参照を必要とします電子データ

todayTaskButton.get(i).addActionListener(new TodayActionListener(taskForToday.get(i))); 

あなたは本当にあなたがリスナーの「今日」の値を持っているように、ボタンを気にしないので、すべて正常に繰り返されたコードがに分離することができ、これは、もう少し集中です単一のクラスとあなたは単にあなたが「変数」要素に

をでき渡す...

Action APIをフル活用し、個人を作り、自己は、各ボタンのアクションが含まれてい...

public class TaskAction extends AbstractAction { 

    public TodayAction(String task) { 
     putValue(NAME, task); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Specific action for task 
    } 

} 

が、これは前のオプションに似ていますが、あなたは単に

todayTaskButton.add(new JButton(new TaskAction(taskForToday.get(i)))); 

を使用することができ、Actionは、作業の自己完結型の単位であり、JButtonを設定するために使用できるプロパティの数を持っていますそれは自己です。 Actionはまた、信じられないほど柔軟

は詳細

+0

パーフェクト回答サー!どうもありがとうございます。正直なところ、私はまだJava Swingプログラミングを探っています。私たちはプロジェクトを作ることになりました。これが初めてのプロジェクトです。だからガイドのおかげで! –

+0

サー。それは完全に動作します。どうもありがとうございます。私はあなたがこれをさらに理解するために提案したリンクについてもっと読むつもりです。私はちょっとあなたのコードをコピーしました。ありがとう! –

+0

誰かがダウン投票の理由を強調したいですか?答えはどのようにしてオペレーションの質問に答えることができないのですか?どのようにして改善することができますか? – MadProgrammer

2

、ありがとうございました。自動的に検出されます。クラスactionPerformed(ActionEvent)を実装するだけです。

次にボタンにリスナーを追加します。

todayTaskButton.get(i).addActionListener(this); 

をごactionPerformed方法では、あなたが行うことができます:

JButton b = (JButton) e.getSource(); 
String text = b.getText(); 
+0

卿のためHow to Use Actions詳しく見を持って作り、JMenuItem sおよびキーバインディングのために再使用することができます。答えてくれてありがとう。私は主な考えを持っている。しかし、私はこのようにしてactionListenerを実装することに慣れています。 JButton.addActionListener(this :: methodName){} –

+0

:次に、自分のクラスにmethodNameを実装します。私の慣れ親しんだ方法であなたの提案を実装する方法を教えてください。あまりにも多くの先生ありがとう –

関連する問題