2011-08-09 17 views
3

私は小さなプロジェクトを作っており、その中にはJFrameと5 JButtonsがあります。 3 JButtonsが主な関心事であり、デフォルトで有効になっています。特定の句でJButtonを無効にするにはどうすればよいですか?

私が欲しいのは、それらのうちのどれか3つが押されていない限り、2の残りの部分は無効のままでなければなりません。

私はActionListnerとで試したが、役に立たなかった。

私が試した複数のコードを確認してください。

public void mousePressed (MouseEvent me){  
    if (me.getButton() == MouseEvent.NOBUTTON){ 

     proceedBtn.setEnabled(false); 
     proceedBtn.setToolTipText("Please Enter A Button Before Proceeding"); 
    } 
    else {     
     proceedBtn.setEnabled(true);   
    } 

} 

ここに私が試した別のコードがあります。

public void mousePressed (MouseEvent me){  
    if (me.getClickCount == 0){ 

     proceedBtn.setEnabled(false); 
     proceedBtn.setToolTipText("Please click a button Before Proceeding"); 
    } 
    else {     
     proceedBtn.setEnabled(true);   
    } 

} 

私はここで間違っていますか?私も同じコードのためにmouseClickedメソッドを試したが、何も起こらなかった。

+0

あなたは 'ActionListener'を使うべきです。あなたは前にこれを試してみたが、役に立たないと言った。そのコードを代わりに見たらどうしたらいいですか? 'MouseListener'を使うことは間違いなくこれを行う方法ではありません。 – mre

+0

おそらく、最初にプッシュする必要のあるボタンにJCheckBoxes、JRadioBoxes、またはJToggleButtonsを使用する必要があります。このようにすれば、ユーザーとプログラムは、プッシュされたかどうかを一目で把握できます。 –

答えて

4

JToggleButtonやその子(JRadioButtonやJCheckBox)のようなトグルタイプのボタンでコードを改善する方がいいですか?このようにして、ユーザは下側のボタンが選択されているか、または「アクティブ」であるか否かを見ることができる。これにより、ユーザーが3つのボトムボタンのうちの1つまたは複数、または(ButtonGroupオブジェクトを使用して)1つのボトムボタンをチェックできるかどうかを制御することもできます。例えば、そして部分的に(彼の答えのため1+)彼のコードを盗むためにMREする謝罪:あなたはJToggleButtonsでこのコードを見たい場合は

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

public class JButtonDemo2 { 
    private static final String[] TOGGLE_NAMES = { "Monday", "Tuesday", 
     "Wednesday" }; 
    private JPanel mainPanel = new JPanel(); 
    private JButton leftButton = new JButton("Left"); 
    private JButton rightButton = new JButton("Right"); 

    private JToggleButton[] toggleBtns = new JToggleButton[TOGGLE_NAMES.length]; 

    public JButtonDemo2() { 
     JPanel topPanel = new JPanel(); 
     topPanel.add(leftButton); 
     topPanel.add(rightButton); 
     leftButton.setEnabled(false); 
     rightButton.setEnabled(false); 

     CheckListener checkListener = new CheckListener(); 
     JPanel bottomPanel = new JPanel(new GridLayout(1, 0, 5, 0)); 
     for (int i = 0; i < toggleBtns.length; i++) { 

     // uncomment one of the lines below to see the program 
     // with check boxes vs. radio buttons, vs toggle buttons 
     toggleBtns[i] = new JCheckBox(TOGGLE_NAMES[i]); 
     // toggleBtns[i] = new JRadioButton(TOGGLE_NAMES[i]); 
     // toggleBtns[i] = new JToggleButton(TOGGLE_NAMES[i]); 


     toggleBtns[i].setActionCommand(TOGGLE_NAMES[i]); 
     toggleBtns[i].addActionListener(checkListener); 
     bottomPanel.add(toggleBtns[i]); 
     } 

     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); 
     mainPanel.add(topPanel); 
     mainPanel.add(bottomPanel); 
    } 

    public JComponent getMainComponent() { 
     return mainPanel; 
    } 

    public void enableTopButtons(boolean enable) { 
     leftButton.setEnabled(enable); 
     rightButton.setEnabled(enable); 
    } 

    private class CheckListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
     for (JToggleButton checkBox : toggleBtns) { 
      if (checkBox.isSelected()) { 
       enableTopButtons(true); 
       return; 
      } 
     } 
     enableTopButtons(false); 
     } 

    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("JButtonDemo2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new JButtonDemo2().getMainComponent()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

は、その後、JCheckBoxesを作成する行をコメントアウトし、その行のコメントを解除JToggleButtonsを作成します。

 // toggleBtns[i] = new JCheckBox(TOGGLE_NAMES[i]); 
    // toggleBtns[i] = new JRadioButton(TOGGLE_NAMES[i]); 
    toggleBtns[i] = new JToggleButton(TOGGLE_NAMES[i]); 

を同様にあなたがのJRadioButtonが唯一のJRadioButtonの行のコメントを解除し、他の二つのコメントでプログラムを表示する場合。

-2

はMouseEventののgetComponentで試してみてください。

if(mouseEvent.getComponent() == aButton) { 

} 

Docs

+0

なぜマウスリスナーを使用しますか? –

+0

私は彼が投稿した内容に基づいてヘルプを提供しようとしていたので。 – Geo

+0

これはうまくいきません、私は以前これを試しました – Shashwat

0

は、通常、アクティブなボタンの上にマウスリスナーを入れてみてください。こうすることで、彼らが起動すると、通常は非アクティブなボタンを有効にすることができます。また、アプリが最初に起動するときに、通常は非アクティブなボタンを無効にするように設定します。

+0

^^彼らは今のところ3つのボタンにのみ設定されています。他の2つのボタンにリスナーを割り当てていません。 – Shashwat

+0

また、jbuttonでマウスリスナーを使用しないでください。ダウン投票した。 –

+0

はい、あなたの提案は実際に働いていましたが、最初はボタンを無効にしました:)それはかなり簡単でしたが、誰もが提案したように私はActionListenerに固執します:) ありがとう:) – Shashwat

3

あなたのボタンはactionListenersです。

その後、最初の3つのボタンの1つがクリックされると、ifの文を.setenabled = trueにすることができます。

私は以前にそれらをやっていましたが、どうやってやりとりしようとするのは快適ではありません。病気になるコードと私よりもうまく説明できるチュートリアルが含まれています。

例:あなたはActionListenerクラスを理解する必要が

JButtonOne.addActionListener(new ButtonHandler();) 

private class ButtonHandler implements ActionListener{ 
public void actionPerformed(ActionEvent event) { 

//write your if statement or call a method etc here 

} 
} 

Actionlistener Tutorial

6

@harper89が提案されているので、How to Write an Action Listenerのチュートリアルもあります。私はまたサブクラスJButtonをお勧めします。これは、ソースのActionEventを照会するよりも適切です。ここで


は例です -

public final class JButtonDemo { 
    private static DisabledJButton disabledBtnOne; 
    private static DisabledJButton disabledBtnTwo; 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       createAndShowGUI();    
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     final JPanel disabledBtnPanel = new JPanel(); 
     disabledBtnOne = new DisabledJButton(); 
     disabledBtnTwo = new DisabledJButton(); 
     disabledBtnPanel.add(disabledBtnOne); 
     disabledBtnPanel.add(disabledBtnTwo); 
     panel.add(disabledBtnPanel); 

     final JPanel enablerBtnPanel = new JPanel(); 
     enablerBtnPanel.add(new EnablerJButton("Button 1")); 
     enablerBtnPanel.add(new EnablerJButton("Button 2")); 
     enablerBtnPanel.add(new EnablerJButton("Button 3")); 
     panel.add(enablerBtnPanel); 

     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private static final class DisabledJButton extends JButton{ 
     public DisabledJButton(){ 
      super("Disabled"); 
      setEnabled(false); 
     } 
    } 

    private static final class EnablerJButton extends JButton{ 
     public EnablerJButton(final String s){ 
      super(s); 
      addActionListener(new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        if(!disabledBtnOne.isEnabled()){ 
         disabledBtnOne.setEnabled(true); 
         disabledBtnOne.setText("Enabled"); 
        } 

        if(!disabledBtnTwo.isEnabled()){ 
         disabledBtnTwo.setEnabled(true); 
         disabledBtnTwo.setText("Enabled"); 
        } 
       } 
      }); 
     } 
    } 
} 

enter image description here


次の3つの有効なボタンのいずれかを押すと、無効なボタンの両方があなたの要求に従って、有効になります。

+0

ありがとうございました:)それは働いた:D – Shashwat

関連する問題