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

标签 java swing

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

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

但是,当从组合框中选择“指标”并单击“添加”按钮时,表格应使用“名称”、“单位指标”和“价格指标”文本字段值进行填充。

我没有明确的想法来使用组合框项目更改用途来影响按钮单击事件。预先感谢您指导我解决这个问题。

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

    }
}

Table Change

最佳答案

您不应该使用空布局和绝对定位。学习Swing layout managers .

JComboBox 可以容纳任何对象。您需要告诉编译器您要传递的对象类型 (String)。您还需要告诉编译器您在 DefaultComboBoxModel 中存储的对象类型。

话虽如此,我将 cmbUType 创建为一个类变量,以便我可以在“添加”按钮操作监听器中引用它。

这是您修改后的代码。

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

    }
}

关于java - JComboBox 选择的索引更改用于使用按钮单击事件将不同的 JTextField 值发送到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61847608/

相关文章:

java - 如何使线程不卡住整个 JFrame。 JAVA

java - 如何在面板中添加图像?

java - JTabbedPane 自动加载组件

java - 为什么即使使用 setSelected(true) 也没有选择 JRadioButton

java - 在 libgdx 中以不同速度移动两个相机

java - 我的子弹出现在错误的地方

java - 如何在(网络)php 应用程序中使用/集成 Apache OpenNLP?

java - 如何将 vector 作为方法参数传递?

java - 如何在Eclipse中引用不在src中的文件

java - JTable在arrayList中显示数据