繁体   English   中英

JComboBox 选择索引更改用于使用按钮单击事件将不同的 JTextField 值发送到 JTable

[英]JComboBox selected index change use to send different JTextField values to JTable using Button Click Event

我尝试使用按钮单击事件将文本字段值发送到表。 但是使用组合框我需要将单位类型更改为“英制”或“公制”。

当 select 组合框中的“英制”并单击添加按钮时,表格应使用“名称”、“单位英制”和“价格英制”文本字段值填充。

但是当 select 组合框中的“公制”并单击“添加”按钮时,表格应使用“名称”、“单位公制”和“价格公制”文本字段值填写。

我没有明确的想法使用 comboBox 项目更改用于影响按钮单击事件。 提前感谢指导我解决这个问题。

public class UnitTable {

    private JFrame frame;
    private JTable table;
    private JTextField txtName;
    private JTextField txtUImp;
    private JTextField txtPImp;
    private JTextField txtUMetric;
    private JTextField txtPMetric;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UnitTable window = new UnitTable();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public UnitTable() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 649, 288);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 10, 526, 181);
        frame.getContentPane().add(scrollPane);

        table = new JTable();
        Object[] columns = { "Name", "Unit", "Price" };
        DefaultTableModel model = new DefaultTableModel();
        scrollPane.setViewportView(table);
        model.setColumnIdentifiers(columns);
        table.setModel(model);

        JLabel lblName = new JLabel("Name");
        lblName.setBounds(10, 201, 96, 13);
        frame.getContentPane().add(lblName);

        txtName = new JTextField();
        txtName.setBounds(10, 224, 96, 19);
        frame.getContentPane().add(txtName);
        txtName.setColumns(10);

        JLabel lblUImp = new JLabel("Unit Imperial");
        lblUImp.setBounds(121, 201, 91, 13);
        frame.getContentPane().add(lblUImp);

        txtUImp = new JTextField();
        txtUImp.setBounds(116, 224, 96, 19);
        frame.getContentPane().add(txtUImp);
        txtUImp.setColumns(10);

        JLabel lblPImp = new JLabel("Price Imperial");
        lblPImp.setBounds(222, 201, 96, 13);
        frame.getContentPane().add(lblPImp);

        txtPImp = new JTextField();
        txtPImp.setBounds(222, 224, 96, 19);
        frame.getContentPane().add(txtPImp);
        txtPImp.setColumns(10);

        JLabel lblUMetric = new JLabel("Unit Metric");
        lblUMetric.setBounds(330, 201, 94, 13);
        frame.getContentPane().add(lblUMetric);

        txtUMetric = new JTextField();
        txtUMetric.setBounds(328, 224, 96, 19);
        frame.getContentPane().add(txtUMetric);
        txtUMetric.setColumns(10);

        JLabel lblPMetric = new JLabel("Price Metric");
        lblPMetric.setBounds(434, 201, 102, 13);
        frame.getContentPane().add(lblPMetric);

        txtPMetric = new JTextField();
        txtPMetric.setBounds(434, 224, 96, 19);
        frame.getContentPane().add(txtPMetric);
        txtPMetric.setColumns(10);

        JButton btnAdd = new JButton("ADD");
        Object[] row = new Object[3];
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                row[0] = txtName.getText();
                row[1] = txtUImp.getText();
                row[2] = txtPImp.getText();

                model.addRow(row);

            }
        });
        btnAdd.setBounds(546, 45, 85, 21);
        frame.getContentPane().add(btnAdd);

        JComboBox cmbUType = new JComboBox();
        cmbUType.setModel(new DefaultComboBoxModel(new String[] { "Imperial", "Metric" }));
        cmbUType.setBounds(546, 8, 85, 21);
        frame.getContentPane().add(cmbUType);

        JButton btnDelete = new JButton("DELETE");
        btnDelete.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                int i = table.getSelectedRow();
                if (i >= 0) {
                    model.removeRow(i);
                } else {
                    JOptionPane.showMessageDialog(null, "Please Select Item to Delete");

                }

            }
        });
        btnDelete.setBounds(546, 76, 85, 21);
        frame.getContentPane().add(btnDelete);

    }
}

表更改

您不应该使用 null 布局和绝对定位。 研究Swing 布局管理器

一个JComboBox可以容纳任何 object。 您需要告诉编译器您传递的是什么类型的 object ( String )。 您还需要告诉编译器您存储在DefaultComboBoxModel中的 object 的类型。

话虽如此,我将cmbUType设为 class 变量,因此我可以在添加按钮操作侦听器中引用它。

这是您修改后的代码。

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

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class UnitTable {

    private JFrame frame;
    private JTable table;
    private JTextField txtName;
    private JTextField txtUImp;
    private JTextField txtPImp;
    private JTextField txtUMetric;
    private JTextField txtPMetric;
    private JComboBox<String> cmbUType;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UnitTable window = new UnitTable();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public UnitTable() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 649, 288);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 10, 526, 181);
        frame.getContentPane().add(scrollPane);

        table = new JTable();
        Object[] columns = { "Name", "Unit", "Price" };
        DefaultTableModel model = new DefaultTableModel();
        scrollPane.setViewportView(table);
        model.setColumnIdentifiers(columns);
        table.setModel(model);

        JLabel lblName = new JLabel("Name");
        lblName.setBounds(10, 201, 96, 13);
        frame.getContentPane().add(lblName);

        txtName = new JTextField();
        txtName.setBounds(10, 224, 96, 19);
        frame.getContentPane().add(txtName);
        txtName.setColumns(10);

        JLabel lblUImp = new JLabel("Unit Imperial");
        lblUImp.setBounds(121, 201, 91, 13);
        frame.getContentPane().add(lblUImp);

        txtUImp = new JTextField();
        txtUImp.setBounds(116, 224, 96, 19);
        frame.getContentPane().add(txtUImp);
        txtUImp.setColumns(10);

        JLabel lblPImp = new JLabel("Price Imperial");
        lblPImp.setBounds(222, 201, 96, 13);
        frame.getContentPane().add(lblPImp);

        txtPImp = new JTextField();
        txtPImp.setBounds(222, 224, 96, 19);
        frame.getContentPane().add(txtPImp);
        txtPImp.setColumns(10);

        JLabel lblUMetric = new JLabel("Unit Metric");
        lblUMetric.setBounds(330, 201, 94, 13);
        frame.getContentPane().add(lblUMetric);

        txtUMetric = new JTextField();
        txtUMetric.setBounds(328, 224, 96, 19);
        frame.getContentPane().add(txtUMetric);
        txtUMetric.setColumns(10);

        JLabel lblPMetric = new JLabel("Price Metric");
        lblPMetric.setBounds(434, 201, 102, 13);
        frame.getContentPane().add(lblPMetric);

        txtPMetric = new JTextField();
        txtPMetric.setBounds(434, 224, 96, 19);
        frame.getContentPane().add(txtPMetric);
        txtPMetric.setColumns(10);

        JButton btnAdd = new JButton("ADD");
        Object[] row = new Object[3];
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String type = (String) cmbUType.getSelectedItem();
                if (type.equals("Imperial")) {
                    row[0] = txtName.getText();
                    row[1] = txtUImp.getText();
                    row[2] = txtPImp.getText();
                } else {
                    row[0] = txtName.getText();
                    row[1] = txtUMetric.getText();
                    row[2] = txtPMetric.getText();
                }

                model.addRow(row);

            }
        });
        btnAdd.setBounds(546, 45, 85, 21);
        frame.getContentPane().add(btnAdd);

        cmbUType = new JComboBox<>();
        cmbUType.setModel(new DefaultComboBoxModel<String>
            (new String[] { "Imperial", "Metric" }));
        cmbUType.setBounds(546, 8, 85, 21);
        frame.getContentPane().add(cmbUType);

        JButton btnDelete = new JButton("DELETE");
        btnDelete.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                int i = table.getSelectedRow();
                if (i >= 0) {
                    model.removeRow(i);
                } else {
                    JOptionPane.showMessageDialog(null, "Please Select Item to Delete");

                }

            }
        });
        btnDelete.setBounds(546, 76, 85, 21);
        frame.getContentPane().add(btnDelete);

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM