将值从JTextFied添加到JTable 公共类BillDetailsPanel实现ActionListener{ JPanel小组; int标志=0; JLabel lItemName、lPrice、lQty、ltax、lDisPrice; JTextField价格、数量、税金、差价; JComboBox项目名称; String[]bookTitles=新字符串[]{“有效Java”,“首字母优先Java”, “用Java思考”、“Java为傻瓜”}; JButton addBtn 公共BillDetailsPanel(){ panel=新的JPanel(); 面板设置首选尺寸(新尺寸(900,50)); FlowLayout布局=新的FlowLayout(FlowLayout.CENTER,5,15); 面板设置布局(布局); //面板.立根背景(颜色.绿色); lItemName=新的JLabel(“项目名称”); lPrice=新的JLabel(“价格”); lQty=新JLabel(“数量”); ltax=新的JLabel(“税”); lDisPrice=新的JLabel(“折扣价”); itemName=新JComboBox(书名); itemName.addActionListener(此); 价格=新的JTextField(8); //price.setEditable(false); 数量=新的JTextField(4); tax=新的JTextField(5); //tax.setedible(false); disPrice=新的JTextField(8); addBtn=新按钮(“添加”); addBtn.addActionListener(此); panel.add(lItemName); 面板。添加(项目名称); 面板。添加(lPrice); 面板。添加(价格); 面板添加(lQty); 面板添加(数量); 面板。添加(ltax); 小组.增列(税务); 面板。添加(lDisPrice); 面板。添加(disPrice); 面板。添加(addBtn); 面板设置可见(真); } 已执行的公共无效操作(操作事件e){ BillTablePanel btp=新的BillTablePanel(); 字符串[]数据=新字符串[5]; 数据[0]=(字符串)itemName.getSelectedItem(); 数据[1]=price.getText(); 数据[2]=数量getText(); 数据[3]=tax.getText(); 数据[4]=数量getText(); btp.model.addRow(数据); btp.model.addRow(数据); System.out.println(数据+“dataaaaaaaaaaaaaaa”); } } } 公共类BillTablePanel实现ActionListener{ 公共JPanel小组; 公共JTable表; 公共JScrollPane滚动窗格,滚动窗格1; 公共模型; 公共INTA=10; 字符串[]数据=新字符串[5]; 公众看板(){ panel=新的JPanel(); panel.setLayout(空); 模型=新的DefaultTableModel(); 字符串columnNames[]={“项目名称”、“实际价格”、“数量”、“税费”, “价格”}; table=新的JTable(); model.setColumnIdentifiers(columnNames); 表2.setModel(model); 表1.setFocusable(假); scrollPane=新的JScrollPane(表); 滚动窗格.设置边界(0,0,850,100); panel.add(滚动窗格); } 公共类TestClassFrame{ jf框架; BillDetailsPanel bill=新BillDetailsPanel(); BillTablePanel BillTablePanel=新的BillTablePanel(); 公共TestClassFrame(){ f=新JFrame(“Zeon系统”); f、 setLayout(空); 仪表板立根(0,0,900,100); f、 增加(法案委员会); billTablePanel.panel.setBounds(0100900500); f、 添加(billTablePanel.panel); f、 包装(); f、 设置大小(900550); f、 setVisible(真); f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } 公共静态void main(字符串[]args){ 新的TestClassFrame(); } }
此代码的问题是Bill detais类包含一些文本框和按钮BillTablepane类包含Jtable我想将BillDetaisaPanel中的项目添加到Jtable 单击未显示任何错误但未插入值的Jbutton时将值从JTextFied添加到JTable 公共类BillDetailsPanel实现ActionListener{ JPanel小组; int标志=0; JLabel lItemName、lPrice、lQty、ltax、lDisPrice; JTextField价格、数量、税金、差价; JComboBox项目名称; String[]bookTitles=新字符串[]{“有效Java”,“首字母优先Java”, “用Java思考”、“Java为傻瓜”}; JButton addBtn 公共BillDetailsPanel(){ panel=新的JPanel(); 面板设置首选尺寸(新尺寸(900,50)); FlowLayout布局=新的FlowLayout(FlowLayout.CENTER,5,15); 面板设置布局(布局); //面板.立根背景(颜色.绿色); lItemName=新的JLabel(“项目名称”); lPrice=新的JLabel(“价格”); lQty=新JLabel(“数量”); ltax=新的JLabel(“税”); lDisPrice=新的JLabel(“折扣价”); itemName=新JComboBox(书名); itemName.addActionListener(此); 价格=新的JTextField(8); //price.setEditable(false); 数量=新的JTextField(4); tax=新的JTextField(5); //tax.setedible(false); disPrice=新的JTextField(8); addBtn=新按钮(“添加”); addBtn.addActionListener(此); panel.add(lItemName); 面板。添加(项目名称); 面板。添加(lPrice); 面板。添加(价格); 面板添加(lQty); 面板添加(数量); 面板。添加(ltax); 小组.增列(税务); 面板。添加(lDisPrice); 面板。添加(disPrice); 面板。添加(addBtn); 面板设置可见(真); } 已执行的公共无效操作(操作事件e){ BillTablePanel btp=新的BillTablePanel(); 字符串[]数据=新字符串[5]; 数据[0]=(字符串)itemName.getSelectedItem(); 数据[1]=price.getText(); 数据[2]=数量getText(); 数据[3]=tax.getText(); 数据[4]=数量getText(); btp.model.addRow(数据); btp.model.addRow(数据); System.out.println(数据+“dataaaaaaaaaaaaaaa”); } } } 公共类BillTablePanel实现ActionListener{ 公共JPanel小组; 公共JTable表; 公共JScrollPane滚动窗格,滚动窗格1; 公共模型; 公共INTA=10; 字符串[]数据=新字符串[5]; 公众看板(){ panel=新的JPanel(); panel.setLayout(空); 模型=新的DefaultTableModel(); 字符串columnNames[]={“项目名称”、“实际价格”、“数量”、“税费”, “价格”}; table=新的JTable(); model.setColumnIdentifiers(columnNames); 表2.setModel(model); 表1.setFocusable(假); scrollPane=新的JScrollPane(表); 滚动窗格.设置边界(0,0,850,100); panel.add(滚动窗格); } 公共类TestClassFrame{ jf框架; BillDetailsPanel bill=新BillDetailsPanel(); BillTablePanel BillTablePanel=新的BillTablePanel(); 公共TestClassFrame(){ f=新JFrame(“Zeon系统”); f、 setLayout(空); 仪表板立根(0,0,900,100); f、 增加(法案委员会); billTablePanel.panel.setBounds(0100900500); f、 添加(billTablePanel.panel); f、 包装(); f、 设置大小(900550); f、 setVisible(真); f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } 公共静态void main(字符串[]args){ 新的TestClassFrame(); } },java,swing,jtable,jbutton,actionlistener,Java,Swing,Jtable,Jbutton,Actionlistener,此代码的问题是Bill detais类包含一些文本框和按钮BillTablepane类包含Jtable我想将BillDetaisaPanel中的项目添加到Jtable 单击未显示任何错误但未插入值的Jbutton时 完整来源是否有人请帮助我查找逻辑错误,在您的actionPerformed方法中,您正在第(1)行创建一个新的BillTablePanel对象,然后尝试在第(2)行添加到表模型: 但是要理解,新的BillTablePanel只是一个全新的、不同的对象,一个与显示的对象完全无关的对象。
完整来源是否有人请帮助我查找逻辑错误,在您的actionPerformed方法中,您正在第(1)行创建一个新的BillTablePanel对象,然后尝试在第(2)行添加到表模型: 但是要理解,新的BillTablePanel只是一个全新的、不同的对象,一个与显示的对象完全无关的对象。要更改显示数据的状态,必须对显示的BillTablePanel对象调用方法,而不是对仅为actionPerformed方法创建的新对象调用方法 例如,这里有一个类似的最小程序:
public void actionPerformed(ActionEvent e) {
BillTablePanel btp=new BillTablePanel(); // **** (1)
// ...
btp.model.addRow(data); // ***** (2)
您的程序创建一个新的未显示的对象,并更改其属性,类似于上面我的程序中的代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TableExample extends JPanel {
private HoldsTable holdsTable = new HoldsTable();
private JTextField lastNameField = new JTextField(10);
private JTextField firstNameField = new JTextField(10);
public TableExample() {
JPanel fieldPanel = new JPanel();
fieldPanel.add(new JLabel("Last Name:"));
fieldPanel.add(lastNameField);
fieldPanel.add(new JLabel("First Name:"));
fieldPanel.add(firstNameField);
JPanel buttonPanel = new JPanel();
buttonPanel.add(new JButton(new AbstractAction("Your Action") {
@Override
public void actionPerformed(ActionEvent evt) {
HoldsTable ht = new HoldsTable(); // creates a new reference -- bad!
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
ht.addName(lastName, firstName);
}
}));
buttonPanel.add(new JButton(new AbstractAction("My Action") {
@Override
public void actionPerformed(ActionEvent evt) {
// HoldsTable ht = new HoldsTable();
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
// ht.addName(lastName, firstName);
holdsTable.addName(lastName, firstName); // use the ref to the displayed object
}
}));
setLayout(new BorderLayout());
add(holdsTable, BorderLayout.CENTER);
add(fieldPanel, BorderLayout.PAGE_START);
add(buttonPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
TableExample mainPanel = new TableExample();
JFrame frame = new JFrame("TableExample");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class HoldsTable extends JPanel {
private static final String[] COL_NAMES = { "Last Name", "First Name" };
private DefaultTableModel model = new DefaultTableModel(COL_NAMES, 0);
private JTable table = new JTable(model);
public HoldsTable() {
setLayout(new BorderLayout());
add(new JScrollPane(table));
}
public void addName(String lastName, String firstName) {
String[] row = { lastName, firstName };
model.addRow(row);
}
}
但由于其状态正在更改的对象(此处为ht
),但在您的代码中,其btp
)不是显示的对象,因此不会显示任何内容
正确的方法显示在其他操作中:
@Override
public void actionPerformed(ActionEvent evt) {
HoldsTable ht = new HoldsTable(); // creates a new reference --
// bad!
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
ht.addName(lastName, firstName);
}
}));
我创建了一个保存JTable的GUI视图字段,这里是
holdsTable
,并对其调用了一个方法。由于holdsTable是可见的,其状态的变化将显示在程序中(这里是JTable).这越来越烦人了。创建一个新的用户ID来问同一个问题,这个问题已经被问了3次。你已经被问了好几次发布SSCCE。你已经得到了关于如何创建SSCCE的建议。但是你仍然会继续转储不编译的无关代码。如果你想学会解决问题,那么你需要学会如何处理简化问题。
@Override
public void actionPerformed(ActionEvent evt) {
HoldsTable ht = new HoldsTable(); // creates a new reference --
// bad!
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
ht.addName(lastName, firstName);
}
}));
@Override
public void actionPerformed(ActionEvent evt) {
// HoldsTable ht = new HoldsTable();
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
// ht.addName(lastName, firstName);
holdsTable.addName(lastName, firstName); // use the ref to the
// displayed object
}