событие прилагается нажатием кнопки - PullRequest
0 голосов
/ 16 июля 2009

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

Ответы [ 4 ]

2 голосов
/ 16 июля 2009

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

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

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

2 голосов
/ 16 июля 2009

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

0 голосов
/ 16 июля 2009

Для учебных целей:

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);
            }
        });
    }

}
0 голосов
/ 16 июля 2009

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

...