我正在尝试编写代码,将一行添加到JTable
。我打字,但什么也没显示。我的showMessageDialog
也有一个错误。
有人知道我怎么重写代码吗?
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import static javax.swing.JOptionPane.showMessageDialog;
public class JTABEL extends Component {
private JPanel panel1;
private JLabel Name;
private JLabel Age;
private JLabel Class;
private JTextField enterNameTextField;
private JTextField Agefield;
private JTextField EnterClassField;
private JTable Table;
private JButton saveButton;
public JTABEL() {
saveButton.addActionListener(this::actionPerformed);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Jtable");
frame.setContentPane(new JTABEL().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private void actionPerformed(ActionEvent e) {
if (enterNameTextField.getText().equals("") || Agefield.getText().equals("") ||
EnterClassField.getText().equals("")) {
showMessageDialog(this, "please Enter all Data");
} else {
String data[] = {enterNameTextField.getText(), Agefield.getText(),
EnterClassField.getText()};
DefaultTableModel tableModel = (DefaultTableModel) Table.getModel();
tableModel.addRow(new Object[]{enterNameTextField.getText(), Agefield.getText(),
EnterClassField.getText()});
showMessageDialog(this, "Add Data Successfully");
enterNameTextField.setText("");
Agefield.setText("");
EnterClassField.setText("");
}
}
}
Oracle提供了一个有用的教程,用Swing创建GUI。跳过NetBeans IDE部分的学习步骤。
我创建了以下GUI。
在添加了几个学生之后,这里是相同的GUI。
模型-视图-控制器(MVC)模式在创建Swing应用程序时非常有用。该名称意味着首先创建模型,然后创建视图,然后创建控制器。
应用程序模型由一个或多个普通Javagetter/setter类组成。
Swing视图是一个带有一个或多个jpanel的
JFrame
。该视图显示模型的内容。视图不会修改模型。
每个Swing
ActionListener
都是一个控制器。控制器更新模型。
我创建了两个模型类。
Student
类包含姓名、年龄和班级。
JTableModel
类为JTable
保存DefaultTableModel
。
所有的Swing应用程序都必须以调用
Swing公用事业
调用程序
方法开始。此方法确保在事件调度线程上创建和执行所有Swing组件。
我创建了一个
JFrame
和两个jpanel
。一个JPanel
保存JTable
,另一个JPanel
保存add student表单。JFrame
有一个默认的BorderLayout
。我把桌子JPanel
放在中间,表格JPanel
放在东边。
表
JPanel
使用BorderLayout
。JTable
放在JScrollPane
的内部。JScrollPane
放在中间的表JPanel
中。
表单
JPanel
使用GridBagLayout
创建表单结构JPanel
。
所有Swing布局管理器的完整解释可以在Oracle教程中找到。
匿名
JButton
ActionListener
检查字段是否已键入。如果是这样,将创建一个Student
实例并将其传递给应用程序模型。如果没有,则会弹出错误显示。
下面是完整的可运行代码。我将附加的类设置为内部类,以便将代码作为一个块发布。
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class JTableExample implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new JTableExample());
}
private final JTableModel model;
private JFrame frame;
private JTextField nameField, ageField, classField;
public JTableExample() {
this.model = new JTableModel();
}
@Override
public void run() {
frame = new JFrame("JTable Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createTablePanel(), BorderLayout.CENTER);
frame.add(createAddPanel(), BorderLayout.EAST);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createTablePanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JTable table = new JTable(model.getTableModel());
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane, BorderLayout.CENTER);
return panel;
}
private JPanel createAddPanel() {
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 5, 5, 5);
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
JLabel label = new JLabel("Name:");
panel.add(label, gbc);
gbc.gridx++;
nameField = new JTextField(20);
panel.add(nameField, gbc);
gbc.gridx = 0;
gbc.gridy++;
label = new JLabel("Age:");
panel.add(label, gbc);
gbc.gridx++;
ageField = new JTextField(20);
panel.add(ageField, gbc);
gbc.gridx = 0;
gbc.gridy++;
label = new JLabel("Class:");
panel.add(label, gbc);
gbc.gridx++;
classField = new JTextField(20);
panel.add(classField, gbc);
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.gridy++;
JButton button = new JButton("Add Student");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String name = nameField.getText().trim();
String ageString = ageField.getText().trim();
String level = classField.getText().trim();
if (name.isEmpty() || ageString.isEmpty() || level.isEmpty()) {
JOptionPane.showMessageDialog(
frame, "Please enter all information");
return;
}
int age = getAge(ageString);
if (age > 0) {
model.addStudent(new Student(name, age, level));
clearInputFields();
}
}
private int getAge(String ageString) {
int age = -1;
try {
age = Integer.valueOf(ageString);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(
frame, "Please enter a numeric age");
}
return age;
}
private void clearInputFields() {
nameField.setText("");
ageField.setText("");
classField.setText("");
nameField.requestFocus();
}
});
panel.add(button, gbc);
frame.getRootPane().setDefaultButton(button);
return panel;
}
public class JTableModel {
private final DefaultTableModel tableModel;
public JTableModel() {
this.tableModel = new DefaultTableModel();
tableModel.addColumn("Name");
tableModel.addColumn("Age");
tableModel.addColumn("Class");
}
public void addStudent(Student student) {
Object[] rowData = new Object[3];
rowData[0] = student.getName();
rowData[1] = student.getAge();
rowData[2] = student.getLevel();
tableModel.addRow(rowData);
}
public DefaultTableModel getTableModel() {
return tableModel;
}
}
public class Student {
private final int age;
private final String level, name;
public Student(String name, int age, String level) {
this.name = name;
this.age = age;
this.level = level;
}
public int getAge() {
return age;
}
public String getLevel() {
return level;
}
public String getName() {
return name;
}
}
}
然后,该函数将使用API将一个json对象发送到数据库中,但似乎Volley.new请求队列(this);是一个空值。java.lang.NullPointerExcture:尝试在com.example.kevin.barcodescanner.addToCart.jsonParse的空对象引用上调用虚拟方法com.android.volley.请求com.android.volley.请求ue
我使用Android Studios 1.5 我正在尝试做一些非常简单的事情:在我的项目中添加一个大的图像,作为我主要活动的背景。当我右键单击res时- 我做错了什么?我读过好几页,没有其他人有过这个问题。
每当用户在JOptionPane确认对话框的帮助下被询问是否将产品添加到购物车时选择“是”,我都会尝试将行添加到我的表中。我的代码如下: 然而,我得到了这个错误:线程“AWT-EventQueue-0”java.lang.ClassCastException:javax.swing中出现异常。JTable$1无法强制转换为javax.swing.table.DefaultTableModel 有人
我试图使用DefaultTableModel动态地向JTable添加数据,但是它不起作用。 我创建了两个类:一个类(Input.java)代表一个弹出窗口,允许你写数据(名称,选项和约束)并保存。另一个类表示一个弹出窗口,其中包含一个表(InputMain.java)。然后,InputMain会将这些信息(如果收到的话)转换为表格中的一行,在三列中列出所有这些信息。在Input中,我创建了Inpu
你好,我尝试在ant中创建一个构建,如果它创建一个html报告,它将从eclips启动我的.class文件 “ “ 生成失败D:\Automation\Eclipse\MyWork\OpenCart\BUILD.xml:23:编译失败;有关详细信息,请参阅编译器错误输出。 总时间:1秒 ${lib}包含用于创建该类的所有库,并且只运行该类可以100%工作,但是当我试图在eclips中作为ant构建
我有一个表,我用phpMyadmin数据库表中的数据填充,但我只希望根据我在文本字段中写入的id有一行。正如你在代码中看到的,我试着这么做,但我得到了一个-java。sql。SQLSyntaxErrorException:您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行中使用接近“from inputs where id='11'”的正确语法;有什么建议或解决方案