2014-09-21 61 views
0

我正在对我的HOMEWORK(请不要为我做我的工作)。我已经有95%完成了。尽管如此,我仍然遇到了麻烦。我需要在JTextArea中显示选定的性别。我必须使用JRadioButton进行性别选择。显示文本从选定的JRadioButton到JTextArea

据我所知,JRadioButtons的工作方式不同。我设置了动作监听器和助记符。我想我在这里搞乱了。似乎我可能需要使用整个团队来设置和行动lister。

任何帮助,非常感谢。

这里是我有我的代码(即我不认为需要这样其他人不能复制粘贴功课减去部分):

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


public class LuisRamosHW3 extends JFrame { 

private JLabel WelcomeMessage; 

private JRadioButton jrbMale = new JRadioButton("Male"); 

private JRadioButton jrbFemale = new JRadioButton("Female"); 

public LuisRamosHW3(){ 

setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30)); 


JPanel jpRadioButtons = new JPanel(); 
jpRadioButtons.setLayout(new GridLayout(2,1)); 
jpRadioButtons.add(jrbMale); 
jpRadioButtons.add(jrbFemale); 
add(jpRadioButtons, BorderLayout.AFTER_LAST_LINE); 


ButtonGroup gender = new ButtonGroup(); 
gender.add(jrbMale); 
jrbMale.setMnemonic(KeyEvent.VK_B); 
jrbMale.setActionCommand("Male"); 
gender.add(jrbFemale); 
jrbFemale.setMnemonic(KeyEvent.VK_B); 
jrbFemale.setActionCommand("Female"); 

//Set defaulted selection to "male" 
jrbMale.setSelected(true); 

//Create Welcome button 
JButton Welcome = new JButton("Submit"); 
add(Welcome); 

Welcome.addActionListener(new SubmitListener()); 
WelcomeMessage = (new JLabel(" ")); 
add(WelcomeMessage); 


} 
class SubmitListener implements ActionListener{ 
@Override 
public void actionPerformed(ActionEvent e){ 

String FirstName = jtfFirstName.getText(); 
String FamName = jtfLastName.getText(); 
Object StateBirth = jcbStates.getSelectedItem(); 
String Gender = gender.getActionCommand(); /*I have tried different 
variations the best I do is get one selection to print to the text area*/ 

WelcomeMessage.setText("Welcome, " + FirstName + " " + FamName + " a " 
+ gender.getActionCommmand + " born in " + StateBirth); 
} 
} 
} /*Same thing with the printing, I have tried different combinations and just can't seem to figure it out*/ 
+0

不知道,但我想应该是这样_getText JRadioButton类的()_或类似的方法。您可能需要使用JRadioButton的动作侦听器,如_onSelectListener_。最后用提取的字符串设置JTextField。根据你的要求,我只告诉你该做什么和怎么做,而不是完全说出正确的东西(其实我也不知道应该做什么)。这应该是正确的流程。祝你好运 – Nabin 2014-09-21 16:54:41

+1

@Nabin:不,不要在JRadioButton上使用ActionListener,因为重要的选择时间是按下提交按钮的时间。原始的海报有它的权利 - 使用ButtonGroup对象,但他首先需要使其可见,给它的类作用域。 – 2014-09-21 17:06:20

回答

2

建议:

  • 让你ButtonGroup变量,性别,一个字段(在类中声明),并且不会在构造函数中声明它,这会将其范围限制在构造函数中。它必须在整个班级中可见。
  • 确保你给你的JRadioButton的actionCommands。 JRadioButtons不像JButton那样,如果你将一个String传递给它的构造函数,这不会自动设置JRadioButton的文本,所以你必须在代码中自己做这件事。
  • 您必须先通过getSelection()
  • 从ButtonGroup对象中获取所选的ButtonModel然后在获取其actionCommand文本之前检查选定的模型是否为空。

例如

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 

import javax.swing.*; 

public class RadioButtonEg extends JPanel { 
    public static final String[] RADIO_TEXTS = {"Mon", "Tues", "Wed", "Thurs", "Fri"}; 

    // *** again declare this in the class. 
    private ButtonGroup buttonGroup = new ButtonGroup(); 
    private JTextField textfield = new JTextField(20); 

    public RadioButtonEg() { 
     textfield.setFocusable(false); 
     JPanel radioButtonPanel = new JPanel(new GridLayout(0, 1)); 
     for (String radioText : RADIO_TEXTS) { 
     JRadioButton radioButton = new JRadioButton(radioText); 
     radioButton.setActionCommand(radioText); // **** don't forget this 
     buttonGroup.add(radioButton); 
     radioButtonPanel.add(radioButton); 
     } 

     JPanel bottomPanel = new JPanel(); 
     bottomPanel.add(new JButton(new ButtonAction("Press Me", KeyEvent.VK_P))); 

     setLayout(new BorderLayout()); 
     add(radioButtonPanel, BorderLayout.CENTER); 
     add(bottomPanel, BorderLayout.PAGE_END); 
     add(textfield, BorderLayout.PAGE_START); 
    } 

    private class ButtonAction extends AbstractAction { 
     public ButtonAction(String name, int mnemonic) { 
     super(name); 
     putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
     ButtonModel model = buttonGroup.getSelection(); 
     if (model == null) { 
      textfield.setText("No radio button has been selected"); 
     } else { 
      textfield.setText("Selection: " + model.getActionCommand()); 
     } 

     } 
    } 

    private static void createAndShowGui() { 
     RadioButtonEg mainPanel = new RadioButtonEg(); 

     JFrame frame = new JFrame("RadioButtonEg"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

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

非常感谢。这应该让我朝着正确的方向前进。 – 2014-09-21 17:07:55

+0

@LuisRamos:不客气,祝你好运! – 2014-09-21 17:08:17

3

我已经做了类似样的问题上JTable我们得到来自无线电组的选择,然后采取相应的行动。想到分享解决方案。

在这里,我已经使用动作监听器对单选按钮进行了分组,每个单选按钮都会有一个与之关联的动作命令。当用户点击一个单选按钮时,随后会触发一个动作,在我们取消选择其他单选按钮选择并使用新选择刷新文本区域时生成一个事件。

enter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextArea; 

public class RadioBtnToTextArea { 
    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       new RadioBtnToTextArea().createUI(); 
      } 
     }; 

     EventQueue.invokeLater(r); 
    } 

    private void createUI() { 
     JFrame frame = new JFrame(); 

     JPanel panel = new JPanel(new BorderLayout()); 
     JPanel radioPnl = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     JPanel textPnl = new JPanel(); 


     JRadioButton radioMale = new JRadioButton(); 
     JRadioButton radioFemale = new JRadioButton(); 

     JTextArea textArea = new JTextArea(10, 30); 

     ActionListener listener = new RadioBtnAction(radioMale, radioFemale, textArea); 

     radioPnl.add(new JLabel("Male")); 
     radioPnl.add(radioMale); 
     radioMale.addActionListener(listener); 
     radioMale.setActionCommand("1"); 

     radioPnl.add(new JLabel("Female")); 
     radioPnl.add(radioFemale); 
     radioFemale.addActionListener(listener); 
     radioFemale.setActionCommand("2"); 

     textPnl.add(textArea); 

     panel.add(radioPnl, BorderLayout.NORTH); 
     panel.add(textPnl, BorderLayout.CENTER); 


     frame.add(panel); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 


class RadioBtnAction implements ActionListener { 

    JRadioButton maleBtn; 
    JRadioButton femaleBtn; 
    JTextArea textArea; 

    public RadioBtnAction(JRadioButton maleBtn, 
           JRadioButton femaleBtn, 
            JTextArea textArea) { 
     this.maleBtn = maleBtn; 
     this.femaleBtn = femaleBtn; 
     this.textArea = textArea; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     int actionCode = Integer.parseInt(e.getActionCommand()); 

     switch (actionCode) { 
     case 1: 
      maleBtn.setSelected(true); 
      femaleBtn.setSelected(false); 
      textArea.setText("Male"); 
      break; 
     case 2: 
      maleBtn.setSelected(false); 
      femaleBtn.setSelected(true); 
      textArea.setText("Female"); 

      break; 
     default: 
      break; 
     } 
    } 

} 
+1

谢谢。我最终做了非常类似的工作。它最终超过了我认为会需要的。它最终解决了。 – 2014-09-21 21:11:17