2014-09-21 1 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

Не уверен, но я думаю, что должен быть метод JRadioButton класса как _getText() _ или что-то подобное. Возможно, вам понадобится использовать прослушиватель действий JRadioButton, например _onSelectListener_. И, наконец, установите JTextField с извлеченной строкой. По вашему запросу я только сказал вам, что делать и как делать, а не точно сказать правильную вещь (на самом деле я тоже не знаю, что делать). Это должен быть правильный поток. Удачи – Nabin

+1

@Nabin: нет, не используйте ActionListener на JRadioButton, потому что время выбора имеет значение, когда нажата кнопка отправки. Исходный плакат имеет это право - используйте объект ButtonGroup, но сначала он должен сделать его видимым, чтобы дать ему класс. –

ответ

2

Предложения:

  • Сделайте свой ButtonGroup, пол, поле (объявленное в классе) и не объявляйте его в конструкторе, который ограничивает его область применения только конструктором. Он должен быть видимым во всем классе.
  • Убедитесь, что вы даете свои команды действий JRadioButton. JRadioButtons не похож на JButtons, поскольку если вы передаете String в свой конструктор, это не автоматически устанавливает текст JRadioButton, поэтому вам придется делать это самостоятельно в своем коде.
  • Сначала вы должны получить выбранную ButtonModel из объекта ButtonGroup через getSelection()
  • Затем убедитесь, что выбранная модель не имеет значения null до получения ее действия. Текст команды.

Например

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

Большое спасибо. Это должно заставить меня идти в правильном направлении. –

+0

@ LuisRamos: добро пожаловать и удачи! –

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

Спасибо. Я закончил очень похожую работу. Это оказалось больше, чем я думал.Это сработало в конце. –

 Смежные вопросы

  • Нет связанных вопросов^_^