Bom, na faculdade, meu professor fala que para colocar um evento no JButton utiliza-se o evento MouseClick. Reparei que neste evento o tecla Enter não funciona, mesmo quando selecionado nele e se o botão estiver desabilitado (setEnabled(false)) ele pega mesmo assim. Por esses motivos eu optei em usar o ActionPerformed que resolve esses problemas…
Mas fiquei curioso, pq ele recomenda usar o MouseClicked?
O correto é usar actionPerformed. Mesmo se você quiser saber se foi pressionada a tecla Ctrl ou Shift enquanto você clicou no botão você pode continuar a usar actionPerformed. Exemplo:
packageguj;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Font;importjava.awt.event.ActionEvent;importjavax.swing.BorderFactory;importjavax.swing.BoxLayout;importjavax.swing.ButtonGroup;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JRadioButton;importjavax.swing.SwingUtilities;importjavax.swing.border.TitledBorder;publicclassTesteRadioButtonsextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJPaneljContentPane=null;privateJPanelpnlButtons=null;privateJRadioButtonrdoFirst=null;privateJRadioButtonrdoSecond=null;privateJRadioButtonrdoThird=null;privateButtonGroupbtgMain=null;privateJButtonbtnOK=null;privateJPanelgetPnlButtons(){if(pnlButtons==null){pnlButtons=newJPanel();pnlButtons.setLayout(newBoxLayout(getPnlButtons(),BoxLayout.Y_AXIS));pnlButtons.setBorder(BorderFactory.createTitledBorder(null,"Radio Buttons",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.ABOVE_TOP,newFont("sansserif",Font.BOLD,12),newColor(59,59,59)));pnlButtons.add(getRdoFirst(),null);pnlButtons.add(getRdoSecond(),null);pnlButtons.add(getRdoThird(),null);pnlButtons.add(getBtnOK(),null);getBtgMain();}returnpnlButtons;}privateButtonGroupgetBtgMain(){if(btgMain==null){btgMain=newButtonGroup();btgMain=newButtonGroup();btgMain.add(getRdoFirst());btgMain.add(getRdoSecond());btgMain.add(getRdoThird());btgMain.setSelected(getRdoFirst().getModel(),true);}returnbtgMain;}privateJRadioButtongetRdoFirst(){if(rdoFirst==null){rdoFirst=newJRadioButton();rdoFirst.setText("First");}returnrdoFirst;}privateJRadioButtongetRdoSecond(){if(rdoSecond==null){rdoSecond=newJRadioButton();rdoSecond.setText("Second");}returnrdoSecond;}privateJRadioButtongetRdoThird(){if(rdoThird==null){rdoThird=newJRadioButton();rdoThird.setText("Third");}returnrdoThird;}privateJButtongetBtnOK(){if(btnOK==null){btnOK=newJButton();btnOK.setText("Check");btnOK.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){StringBuildersb=newStringBuilder();intmodifiers=e.getModifiers();if((modifiers&ActionEvent.SHIFT_MASK)!=0)sb.append("Shift, ");if((modifiers&ActionEvent.CTRL_MASK)!=0)sb.append("Ctrl, ");if((modifiers&ActionEvent.ALT_MASK)!=0)sb.append("Alt, ");if((modifiers&ActionEvent.META_MASK)!=0)sb.append("Meta, ");JOptionPane.showMessageDialog(TesteRadioButtons.this,sb.toString());}});}returnbtnOK;}publicstaticvoidmain(String[]args){// TODO Auto-generated method stubSwingUtilities.invokeLater(newRunnable(){publicvoidrun(){TesteRadioButtonsthisClass=newTesteRadioButtons();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}publicTesteRadioButtons(){super();initialize();}privatevoidinitialize(){this.setSize(300,200);this.setContentPane(getJContentPane());this.setTitle("JFrame");}privateJPanelgetJContentPane(){if(jContentPane==null){jContentPane=newJPanel();jContentPane.setLayout(newBorderLayout());jContentPane.add(getPnlButtons(),BorderLayout.CENTER);}returnjContentPane;}}
A
anderson_lp789
Olá entanglement , não entendi sua colocação a respeito de teclas pressionadas ao mesmo tempo do click.
é se quando ele clicou no botão ele está pressionando alguma tecla junto? eh isso?
Haveria problemas de se utilizar o actionPerfomed?
M
marcobiscaro2112
anderson_lp789:
Olá entanglement , não entendi sua colocação a respeito de teclas pressionadas ao mesmo tempo do click.
é se quando ele clicou no botão ele está pressionando alguma tecla junto? eh isso?
Haveria problemas de se utilizar o actionPerfomed?
Exatamente isso que ele demonstrou: não há problema algum em usar actionPerformed mesmo que você precise, por exemplo, saber se o usuário pressionou alguma tecla modificador (como Ctrl, Shift ou Alt) ao clicar no botão.
A
anderson_lp789
marcobiscaro2112:
anderson_lp789:
Olá entanglement , não entendi sua colocação a respeito de teclas pressionadas ao mesmo tempo do click.
é se quando ele clicou no botão ele está pressionando alguma tecla junto? eh isso?
Haveria problemas de se utilizar o actionPerfomed?
Exatamente isso que ele demonstrou: não há problema algum em usar actionPerformed mesmo que você precise, por exemplo, saber se o usuário pressionou alguma tecla modificador (como Ctrl, Shift ou Alt) ao clicar no botão.