2009-07-16 3 views
0

У меня есть JFrame, в котором есть 2 текстовых поля и 1 JButton. Пользователям необходимо ввести некоторую строку в текстовое поле. Когда пользователь нажимает кнопку в JFrame, эти строки отображаются в JTable. Я не получаю код, который я должен писать с нажатием кнопки. Пожалуйста, помогите мне.событие прилагается с нажатием кнопки

+2

Что вы получили до сих пор? – seth

+1

Еще раз вы задаете вопрос, который рассматривается в учебнике Swing. Вам была предоставлена ​​ссылка на этот учебник, посвященный многочисленным темнам. Начните читать учебник и опубликуйте свой код, когда у вас возникнут проблемы. Я для одного не знаю, связана ли ваша проблема с a) нажмите кнопку, b) получив текст из текстовых полей, c) добавив строку в таблицу. Не ожидайте, что мы догадаемся, что вы просите, и не ожидайте, что люди будут постоянно ложкой кормить вас ответом. – camickr

ответ

2

Посмотрите на метод void addActionListener(ActionListener l). Также часто помогает Javadoc определенного класса: Java API

0

вам нужно добавить кнопку actionlistener к кнопке. попробуйте выполнить поиск в google. на данный момент вы можете посмотреть на эту ссылку Jbutton example

2

Ваше описание слишком расплывчато для хорошего ответа, но я подозреваю, что вам не хватает шага, добавляя к кнопке прослушиватель действий. Это описано, например. в Sun's Swing tutorials. Я лично не нравится их стиль и предпочитают анонимные внутренние классы себя:

myButton.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
    callMyMethod(); 
    } 
} 

В любом случае работает, я предпочитаю анонимные внутренние классы, так как они держат вещи местных и избежать массивную метод переключения в противном случае вы получите.

+2

Важная вещь здесь «CallMyMethod()». Не записывайте логику внутри прослушивателя действий, а вызывайте метод, в котором вы определяете свою логику (возможно, даже в каком-то другом классе контроллера). – Juri

+0

У меня на самом деле был этот дополнительный комментарий, написанный в оригинальном ответе, но затем решил для краткости :-) Может быть, я не должен был. Я стараюсь, чтобы содержание actionPerformed было примерно до одной строки (одна строка в> 90%, случайная «получить X от события, а затем метод вызова» закрадывается). –

0

Для целей обучения:

import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.GroupLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.GroupLayout.Alignment; 
import javax.swing.table.AbstractTableModel; 

public class NameGUI extends JFrame { 
    class NamePair { 
     String firstName; 
     String lastName; 
    } 

    class NameModel extends AbstractTableModel { 
     List<NamePair> names = new ArrayList<NamePair>(); 

     @Override 
     public String getColumnName(int column) { 
      switch (column) { 
      case 0: 
       return "First name"; 
      case 1: 
       return "Last name"; 
      } 
      return ""; 
     } 

     @Override 
     public int getColumnCount() { 
      return 2; 
     } 

     @Override 
     public int getRowCount() { 
      return names.size(); 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
      switch (columnIndex) { 
      case 0: 
       return names.get(rowIndex).firstName; 
      case 1: 
       return names.get(rowIndex).lastName; 
      } 
      return null; 
     } 

     @Override 
     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return true; 
     } 

     @Override 
     public void setValueAt(Object value, int rowIndex, int columnIndex) { 
      switch (columnIndex) { 
      case 0: 
       names.get(rowIndex).firstName = String.valueOf(value); 
       break; 
      case 1: 
       names.get(rowIndex).lastName = String.valueOf(value); 
       break; 
      } 
     } 

    } 

    JTextField firstName; 
    JTextField lastName; 
    JButton addName; 
    JTable nameTable; 
    NameModel nameModel; 

    public NameGUI() { 
     super("My GUI"); 
     Container c = getContentPane(); 
     GroupLayout gl = new GroupLayout(c); 
     c.setLayout(gl); 
     gl.setAutoCreateContainerGaps(true); 
     gl.setAutoCreateGaps(true); 
     firstName = new JTextField(20); 
     lastName = new JTextField(20); 
     addName = new JButton("Add name"); 
     // MAGIC STARTS ********************* 
     addName.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       onButtonClick(); 
      } 
     }); 
     // MAGIC ENDS *********************** 
     nameModel = new NameModel(); 
     nameTable = new JTable(nameModel); 
     JScrollPane nameTableScroll = new JScrollPane(nameTable); 

     gl.setHorizontalGroup(
      gl.createParallelGroup() 
      .addGroup(
       gl.createSequentialGroup() 
       .addComponent(firstName) 
       .addComponent(lastName) 
       .addComponent(addName) 
      ) 
      .addComponent(nameTableScroll) 
     ); 
     gl.setVerticalGroup(
      gl.createSequentialGroup() 
      .addGroup(
       gl.createParallelGroup(Alignment.BASELINE) 
       .addComponent(firstName) 
       .addComponent(lastName) 
       .addComponent(addName) 
      ) 
      .addComponent(nameTableScroll) 
     ); 

     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
    } 

    private void onButtonClick() { 
     NamePair np = new NamePair(); 
     np.firstName = firstName.getText(); 
     np.lastName = lastName.getText(); 
     nameModel.names.add(np); 
     nameModel.fireTableDataChanged(); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new NameGUI().setVisible(true); 
      } 
     }); 
    } 

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