gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:41:56 25 4
gpt4 key购买 nike

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

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

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com