- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在向 jtable 添加数据时遇到困难。它首先从集合中加载数据,使用 jtextfield 添加新数据,当然数据已添加到调试过的集合中,但我无法在 jtable 中显示新添加的日期。我已经尝试了所有可能的方法但无法成功。下面的代码是我工作的一部分。
谢谢
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.example.gui;
import com.example.service.CustomerService;
import com.example.service.VehicleService;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
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.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
*
* @author Tugrul
*/
public class VehicleTypes extends JFrame {
private JLabel lblVehicleType;
private JTextField txtVehicleType;
private JButton btnCreateVehicleType;
private JButton btnClearField;
private JTable jtDataTable;
private JPanel formPanel;
private JPanel dataPanel;
private JPanel buttonPanel;
private JMenu jmFile;
private JMenu jmCustomer;
private JMenu jmServiceDesk;
private JMenuBar appMenuBar;
private JMenuItem jmiMainMenu;
private JMenuItem jmiExit;
private JMenuItem jmiPlaceBooking;
private JMenuItem jmiRegister;
private JMenuItem jmiVehicleTypes;
private JMenuItem jmiCustomerType;
private JMenuItem jmiVehicles;
private JMenuItem jmiCustomers;
private JMenuItem jmiManageBookings;
private CustomDataTable customDataTable;
public VehicleTypes() {
drawForm();
}
public void drawForm() {
customDataTable = new CustomDataTable();
jtDataTable = new JTable(customDataTable);
/*Drawing root menu*/
jmFile = new JMenu("File");
jmCustomer = new JMenu("Customer");
jmServiceDesk = new JMenu("Service Desk");
appMenuBar = new JMenuBar();
/*Drawing File Menu*/
jmiMainMenu = new JMenuItem("Main Menu");
jmiExit = new JMenuItem("Exit");
jmFile.add(jmiMainMenu);
jmFile.add(jmiExit);
/*Drawing Customer Menu*/
jmiPlaceBooking = new JMenuItem("Place Booking");
jmiRegister = new JMenuItem("Register");
jmCustomer.add(jmiPlaceBooking);
jmCustomer.add(jmiRegister);
/*Drawing Service Desk Menu*/
jmiVehicleTypes = new JMenuItem("Vehicle Types");
jmiCustomerType = new JMenuItem("Customer Types");
jmiVehicles = new JMenuItem("Vehicles");
jmiCustomers = new JMenuItem("Customers");
jmiManageBookings = new JMenuItem("Manage Bookings");
jmServiceDesk.add(jmiVehicleTypes);
jmServiceDesk.add(jmiCustomerType);
jmServiceDesk.add(jmiVehicles);
jmServiceDesk.add(jmiCustomers);
jmServiceDesk.add(jmiManageBookings);
/*Add menus to menubar*/
appMenuBar.add(jmFile);
appMenuBar.add(jmCustomer);
appMenuBar.add(jmServiceDesk);
/*Adding listeners for each element*/
jmiMainMenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiPlaceBooking.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiRegister.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiVehicleTypes.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiCustomerType.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiVehicles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiCustomers.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
jmiManageBookings.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
lblVehicleType = new JLabel("Vehicle Type");
txtVehicleType = new JTextField();
btnCreateVehicleType = new JButton("Create");
btnClearField = new JButton("Clear Fields");
formPanel = new JPanel();
dataPanel = new JPanel();
buttonPanel = new JPanel();
setSize(800, 600);
setTitle("Vehicle Types");
setDefaultCloseOperation(EXIT_ON_CLOSE);
//Centering the application on screen
Toolkit toolkit = getToolkit();
Dimension size = toolkit.getScreenSize();
setLocation(size.width / 2 - getWidth() / 2,
size.height / 2 - getHeight() / 2);
formPanel.add(lblVehicleType);
formPanel.add(txtVehicleType);
dataPanel.add(new JScrollPane(jtDataTable));
buttonPanel.add(btnCreateVehicleType);
buttonPanel.add(btnClearField);
/*Setting layouts for panels*/
formPanel.setLayout(new GridLayout(1, 1, 0, 0));
dataPanel.setLayout(new GridLayout(1, 2, 10, 10));
buttonPanel.setLayout(new GridLayout(2, 1, 5, 5));
/*Adding panels to main jframe*/
add(dataPanel, BorderLayout.NORTH);
add(formPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
setJMenuBar(appMenuBar);
//Adding buttons to listeners
btnCreateVehicleType.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
btnClearField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
formListener(e);
}
});
}
private class CustomDataTable extends AbstractTableModel {
private VehicleService vehicleService = new VehicleService();
int rowCount = vehicleService.retrieveVehicleTypes().size();
private String[] columnNames = {"Vehicle Type"};
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public int getRowCount() {
return rowCount;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object val = (Object) vehicleService.retrieveVehicleTypes().get(rowIndex);
return val;
}
public void insertData(String values) {
vehicleService.createVehicleType(values);
fireTableDataChanged();
System.out.println("affected data" + vehicleService.retrieveVehicleTypes().toString());
}
}
public void clearFields() {
txtVehicleType.setText("");
}
public void formListener(ActionEvent e) {
VehicleService vehicleService = new VehicleService();
String clickedItem = e.getActionCommand();
String vehicleType = txtVehicleType.getText().toString();
if (clickedItem.equals("Create")) {
if (vehicleService.checkVehicleTypeAvailability(vehicleType)) {
JOptionPane.showMessageDialog(null, vehicleType + " Vehicle type already exists in Database",
"Vehicle Warning",
JOptionPane.WARNING_MESSAGE);
} else {
customDataTable.insertData(vehicleType);
this.invalidate();
this.validate();
this.repaint();
this.revalidate();
jtDataTable.revalidate();
jtDataTable.repaint();
}
}
if (clickedItem.equals("Clear Fields")) {
//clear field code
clearFields();
}
//Jmenu listener
if (clickedItem.equals("Main Menu")) {
VehicleTypes customerTypes = new VehicleTypes();
CustomerManagement customerManagement = new CustomerManagement();
customerTypes.setVisible(false);
customerManagement.setVisible(true);
}
if (clickedItem.equals("Exit")) {
int dialogButton = JOptionPane.YES_NO_OPTION;
int dialogResult = JOptionPane.showConfirmDialog(null, "Are you sure to leave the application", "Confim Process", dialogButton);
if (dialogResult == 0) {
System.exit(1);
}
}
if (clickedItem.equals("Place Booking")) {
}
if (clickedItem.equals("Register")) {
}
if (clickedItem.equals("Vehicle Types")) {
//dont do anything
}
if (clickedItem.equals("Customer Types")) {
CustomerTypes customerTypes = new CustomerTypes();
this.setVisible(false);
customerTypes.setVisible(true);
}
if (clickedItem.equals("Vehicles")) {
}
if (clickedItem.equals("Customers")) {
}
if (clickedItem.equals("Manage Bookings")) {
}
}//Action listener end curly brace
public static void main(String[] args) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
System.out.println("Exception Caught " + ex);
} catch (InstantiationException ex) {
System.out.println("Exception Caught " + ex);
} catch (IllegalAccessException ex) {
System.out.println("Exception Caught " + ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
System.out.println("Exception Caught " + ex);
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new VehicleTypes().setVisible(true);
}
});
}
}
最佳答案
这个方法没有很好实现:
public void insertData(String values) {
vehicleService.createVehicleType(values);
fireTableDataChanged(); // No, call fireTableRowsInserted(...) instead
...
}
调用fireTableDateChanged()此时是过度且不必要的,因为您似乎在表中添加了一行。正确的实现应该调用fireTableRowsInserted(int firstRow, int lastRow)如下:
public void insertData(String values) {
vehicleService.createVehicleType(values);
int lastIndex = vehicleService.retrieveVehicleTypes().size() - 1;
fireTableRowsInserted(lastIndex, lastIndex); // first and last indices are the same
}
此外,在向表模型添加新行后,无需进行任何 revalidate()
或 repaint()
操作。只需通知监听器就足够了:JTable
是其自己模型的监听器,并将在 TableModelEvents
上相应地重新绘制自身。
关于java - AbstractDataTable fireTableDataChanged() 不刷新jtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163156/
我即将使用 Eclipse 创建一个使用 JTable 的 Java 程序。我所做的是创建 JTable,将其与一个扩展 AbstractTableModel 的类(我称为 ResultsTableM
我有一个合理简单的 JTable,我想每秒更新一次。 为此,我发现您应该使用 fireTableDataChanged(),但是,经过多次尝试后我仍然无法让它工作。 import java.awt.e
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
fireTableDataChanged 似乎对我不起作用: 主要类: tblBookOfMonth = new JTable(tableModel); tableModel.setD
添加一行后,我预计 JTable 会被刷新。不幸的是事实并非如此。 我的代码是这样的: 如何添加行: JButton btnDodaj = new JButton("Dodaj");` panel.a
我在向 jtable 添加数据时遇到困难。它首先从集合中加载数据,使用 jtextfield 添加新数据,当然数据已添加到调试过的集合中,但我无法在 jtable 中显示新添加的日期。我已经尝试了所有
我有两个表,当单击该记录时,我尝试将一个表中的记录中的数据添加到另一个表中。 当前,当我单击表格时,值会添加到 clickedData,但该数据不会在表格中刷新。 这是我的代码: import jav
我有一个 JTable 可以跟踪一个人在餐厅等待就座的时间。我的问题是每一秒,当计时器“滴答作响”时,一行上的选择被删除。换句话说,如果您单击一行,它会以蓝色背景和轮廓突出显示,但是当计时器滴答作响时
它从 ThingSpeak 下载数据并显示在 jtable 中。我创建了一个“刷新”按钮,它将下载最新数据并显示在现有的 GUI 表中。 获取最新数据...工作 存储在列表/数组中...工作 更新 j
我在 Java Swing 中更新 JTable 时遇到问题。 我想要显示的数据每秒变化几次,我正在寻找一种有效的方法来更新 JTable 中的数据。 我使用方法 setModel() 来更新数据,它
我的程序中有一个 JTable。我想在单击 JButton 后更新它。我写了这个: DefaultTableModel myTable = new DefaultTableModel(celDatas
到目前为止,我对 JTable 的定义如下: JTable table = new JTable(model) { @Override public Compo
我是 still挣扎于JTable应该会自动更新。 情况如下:我实例化 MyTable (扩展 JTable ),并将其设置在我的 UI 类 ( MyView ) 中。 MyTable类将 UI 类和
我使用的 JTable 的 TableModel 通过 fireTableDataChanged() 定期更新。这些更改通常非常小,例如添加或修改的单行,但我无法预测它会在哪里发生。 有没有办法知道在
我已经多次搜索和看到这个问题,但没有一个解决方案有效。 我有一个 AbstractTableModel,我已经对其进行了扩展并称为 AccountTableModel。代码是这样的。 import I
我有一个扩展 AbstractTableModel 的 jtable。我注册了两个 ListSelectionListener,它们获取所选单元格的行和列。但是,当我调用模型中定义的 updateDa
本文整理了Java中com.tc.admin.common.XObjectTableModel.fireTableDataChanged()方法的一些代码示例,展示了XObjectTableModel
添加一行并调用 fireTableRowInserted() 还是添加所有行然后调用 fireTableDataChanged() 是个好主意? 最佳答案 如果您所做的只是添加新行,最好添加所有行,然
我是一名优秀的程序员,十分优秀!