Выберите строку из JTable и передайте данные в jTextFields - JAVA

У меня есть класс под названием «Compra.java» (JFrame), где есть JTable с НЕ купленными автомобилями, доступными для продажи, если я выберу строку (транспортное средство) из этой таблицы и нажму JButton » button_comprar "должен отправить меня в форму JDialog под названием" Comprar_vehiculo.java ", где эти данные таблицы автоматически загружаются в поля jTextField.

Как передать данные в столбцах таблицы в поля jTextField?

Описательное изображение задачи 1: https: //s30.postimg. org / 4f0rx6yqp / image.png

Описательное изображение проблемы 2: https://s30.postimg.org/ro346iw01/image.png

Код попытался:

private void button_comprarActionPerformed(java.awt.event.ActionEvent evt) {                                               
        int filaseleccionada;
        try{
            //Guardamos en un entero la fila seleccionada.
            filaseleccionada = table_comprados.getSelectedRow();
            if (filaseleccionada == -1){
                JOptionPane.showMessageDialog(null, "No ha seleccionado ninguna fila.");
            } else {
                Comprar_vehiculo cv = new Comprar_vehiculo(null, rootPaneCheckingEnabled);
                cv.setVisible(true);

                //String ayuda = tabla.getValueAt(filaseleccionada, num_columna).toString()); 
                String bastidor = (String)table_comprados.getValueAt(filaseleccionada, 0);
                String color = (String)table_comprados.getValueAt(filaseleccionada, 1);
                String matricula = (String)table_comprados.getValueAt(filaseleccionada, 2);
                String marca = (String)table_comprados.getValueAt(filaseleccionada, 3);
//                textfield_bastidor.setText(bastidor);
//                textfield_color.setText(color);
//                textfield_marca.setText(email);
//                textfield_modelo.setText(matricula);
//                textfield_matricula.setText(marca);
            }
        }catch (HeadlessException ex){
            JOptionPane.showMessageDialog(null, "Error: "+ex+"\nInténtelo nuevamente", " .::Error En la Operacion::." ,JOptionPane.ERROR_MESSAGE);
        }        
    } 
0
задан 14.01.2017, 19:16
0 ответов

Маленький пример того, как мог бы применяться этот тип функциональности:

  1. (Сходная) модель
  2. VistaPrincipal с agregarListener (ActionListener в) и getters для компонентов, которые будут перемещать себя ссылку между совещаниями
  3. Второстепенный вид (мой пример - это, чтобы издавать стоимость.)
  4. listener, чтобы этого отделять от вида и власти сообщать лучше компоненты.
  5. Драйвер, который находится в связи litener с видом

Если он закрепляется, драйвер берется за то, чтобы делать себе коммуникацию ты (снабжаешь ссылками) между listeners и совещания.

listeners берутся за то, чтобы использовать вид / модель, чтобы реализовывать задания, полученные (посредством событий).

Все делегация заданий пробуя отделять задания с различным намерением.

Если он прокручивает изображение в окне MainController он сможет видеть все в действии...

Драйвер и Main

import javax.swing.SwingUtilities;

import listeners.EditButtonListener;
import m.Vehiculo;
import v.TableFrame;

public class MainController {

    public MainController(TableFrame v) {

        EditButtonListener ebl = new EditButtonListener(v);

        v.addListeners(ebl);

        v.addVehicle(new Vehiculo("911 carrera", "Porsche"));
        v.addVehicle(new Vehiculo("Diablo", "Lamborguini"));

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {

                TableFrame frame = new TableFrame();

                new MainController(frame);
            }
        });
    }
}

Второстепенный вид

import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import m.Vehiculo;

public class VehicleEditPopUp extends JFrame {

    private static final long serialVersionUID = 1L;

    private Vehiculo vehicle;
    private TableFrame view;

    private JTextField inMarca;

    private JTextField inModelo;

    private JButton btnOk;

    private static final int COL_SIZE = 25;

    public VehicleEditPopUp(Vehiculo vehicl, TableFrame v, int editRow) {

        vehicle = vehicl;
        view = v;

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));

        Point location = view.getLocation();

        setBounds((int) location.getX(), (int) location.getY(), 300, 600);

        inMarca = new JTextField(vehicle.getMarca(), COL_SIZE);
        inModelo = new JTextField(vehicle.getModelo(), COL_SIZE);

        btnOk = new JButton("Ok");
        // tambien hubiese sido posible crear un Listener aparte..
        // diferentes formas de hacer  las cosas.. 
        // cuando ya hay mucho código puede que sea mejor un Listener separado
        btnOk.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                String marca = inMarca.getText();
                String modelo = inModelo.getText();

                view.editVehicle(new Vehiculo(marca, modelo), editRow);

                closePopUp();
            }
        });

        add(new JLabel("Marca"));
        add(inMarca);
        add(new JLabel("Modelo"));
        add(inModelo);
        add(btnOk);

        setVisible(true);
    }

    public void closePopUp() {
        this.dispose();
    }
}

Listener Que помогает VistaPrincipal

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import m.Vehiculo;
import v.TableFrame;
import v.VehicleEditPopUp;

public class EditButtonListener implements ActionListener {

    private TableFrame view;
    private JButton btn;
    private DefaultTableModel model;
    private JTable table;

    public EditButtonListener(TableFrame v) {
        view = v;

        btn = view.getBtn();

        model = view.gettModel();

        table = view.getTable();

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == btn) {

            int row = table.getSelectedRow();

            if (row != -1) {

                String marca = (String) table.getValueAt(row, 0);
                String modelo = (String) table.getValueAt(row, 1);

                Vehiculo selectedVehicle = new Vehiculo(marca, modelo);

                new VehicleEditPopUp(selectedVehicle, view, row);

            } else {

                Vehiculo emptyV = new Vehiculo();
                view.addVehicle(emptyV);
                new VehicleEditPopUp(emptyV, view, model.getRowCount() + 1);

            }

        }
    }

}

VistaPrincipal

import java.awt.BorderLayout;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import m.Vehiculo;

public class TableFrame extends JFrame {

    private static final long serialVersionUID = 1L;

    private DefaultTableModel tModel;

    private JTable table;

    private JButton btn;

    public TableFrame() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(50, 50, 700, 600);
        setLayout(new BorderLayout(5, 5));

        String[] cols = { "Modelo", "Marca" };

        tModel = new DefaultTableModel();
        tModel.setColumnIdentifiers(cols);
        table = new JTable(tModel);

        btn = new JButton("Edit");

        add(new JScrollPane(table), BorderLayout.CENTER);
        add(btn, BorderLayout.SOUTH);

        setVisible(true);
    }

    public void addVehicle(Vehiculo v) {

        String[] data = { v.getMarca(), v.getModelo() };
        tModel.addRow(data);
        tModel.fireTableDataChanged();
    }

    public void editVehicle(Vehiculo v, int row) {

        String[] data = { v.getMarca(), v.getModelo() };

        for (int col = 0; col <= data.length - 1; col++) {

            tModel.setValueAt(data[col], row, col);
        }

        tModel.fireTableDataChanged();
    }

    public void addListeners(ActionListener al) {
        btn.addActionListener(al);
    }

    public DefaultTableModel gettModel() {
        return tModel;
    }

    public JTable getTable() {
        return table;
    }

    public JButton getBtn() {
        return btn;
    }

}

Модель

public class Vehiculo {

    private String modelo;
    private String marca;
    // setters & getters
    // constructor vacío & constructor con argumentos
}
2
ответ дан 03.12.2019, 17:41