可以动态刷新可刷新
首先,我是Java的新手。我用4个面板制作GUI( Mainprogram
)。
in centerpanel
in Centerpanel 是可jtable显示了来自数据库中的数据。
在 toppanel < / code>中,我将按钮打开新类 /窗口 - (添加客户)带有一些输入字段。单击“保存”按钮数据后,将数据保存到数据库中,
dispose()
。数据正确保存到数据库中。问题是保存后如何在主题中刷新表格?提前致谢。
有一些代码:
mainprogram.java
public class MainProgram extends JFrame {
Connection connection = MysqlConnect.dbConnector();
private static final long serialVersionUID = 1L;
public JPanel contentPane;
public String selectedRowIndex;
Object[][] data;
String columns[];
public JPanel centerPanel;
public JScrollPane pane;
private JTable table;
public MainProgram() throws IOException {
setTitle("Main Program");
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setBounds(100, 100, 1086, 501);
setLocationRelativeTo(null);
// setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
addWindowListener((WindowListener) new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
String ObjButtons[] = { "Yes", "No" };
int PromptResult = JOptionPane.showOptionDialog(null, "Are you sure you want to exit?", "SkladModule",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, ObjButtons, ObjButtons[1]);
if (PromptResult == 0) {
System.exit(0);
}
}
});
// left panel
JPanel leftPanel = new JPanel();
contentPane.add(leftPanel, BorderLayout.WEST);
// center panel
centerPanel = new JPanel(new GridLayout());
centerPanel.setBorder(new TitledBorder(
new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)), "INFO",
TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
contentPane.add(centerPanel, BorderLayout.CENTER);
try {
int count = 0;
String query = "SELECT * FROM vehicles";
String queryRow = "select count(*) from vehicles";
Statement stm = connection.createStatement();
ResultSet rows = stm.executeQuery(queryRow);
if (rows.next()) {
count = rows.getInt(1);
rows.close();
}
ResultSet res = stm.executeQuery(query);
// client_id, plate, make, model, year, engine_cc, color, vehicle_owner,
// vehicle_owner_contact, mechanic, in_garage, service_start, service_end,
// service_cost, parts_cost, service_paid, notes
columns = new String[] { "ID", "Plate", "Make", "Model", "Year", "Engine", "Color", "Owner", "Owner Tel.",
"In Garage", "Service Paid", "Notes" };
data = new Object[count][12];
int i = 0;
while (res.next()) {
int id = res.getInt("client_id");
data[i][0] = id + "";
data[i][1] = res.getString("plate");
data[i][2] = res.getString("make");
data[i][3] = res.getString("model");
data[i][4] = res.getString("year");
data[i][5] = res.getString("engine_cc");
data[i][6] = res.getString("color");
data[i][7] = res.getString("vehicle_owner");
data[i][8] = res.getString("vehicle_owner_contact");
data[i][9] = res.getString("in_garage");
data[i][10] = res.getString("service_paid");
data[i][11] = res.getString("notes");
i++;
}
table = new JTable();
TableModel model = new DefaultTableModel(data, columns);
table.setModel(model);
// JTable table = new JTable(data, columns);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++) {
int width = 15; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width + 10, width);
}
width = Math.max(width, table.getColumnModel().getColumn(column).getPreferredWidth());
if (width > 300)
width = 300;
columnModel.getColumn(column).setPreferredWidth(width);
}
table.setFocusable(false);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDefaultEditor(Object.class, null);
table.setShowGrid(true);
table.setShowVerticalLines(true);
pane = new JScrollPane(table);
centerPanel.add(pane);
table.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
selectedRowIndex = table.getModel().getValueAt(table.getSelectedRow(), 0).toString();
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
});
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (selectedRowIndex != null) {
int rowID = Integer.parseInt(selectedRowIndex);
System.out.println(rowID);
} else {
JOptionPane.showMessageDialog(null, "Please select row!", "No selected vehicle",
JOptionPane.INFORMATION_MESSAGE);
}
}
});
leftPanel.add(btnNewButton);
} catch (SQLException e) {
e.printStackTrace();
}
// bottom panel
// create the status bar panel and shove it down the bottom of the frame
JPanel statusPanel = new JPanel();
statusPanel.setBorder((Border) new BevelBorder(BevelBorder.LOWERED));
contentPane.add(statusPanel, BorderLayout.SOUTH);
statusPanel.setPreferredSize(new Dimension(contentPane.getWidth(), 20));
statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.X_AXIS));
JLabel statusLabel = new JLabel("");
statusLabel.setHorizontalAlignment(SwingConstants.LEFT);
statusPanel.add(statusLabel);
contentPane.setVisible(true);
// add username from login to statusbar
String username = Login.uname;
statusLabel.setText("Logged user: " + username);
JPanel topPanel = new JPanel();
contentPane.add(topPanel, BorderLayout.NORTH);
BufferedImage buttonIcon = ImageIO
.read(new File("C:\\Users\\User\\eclipse-workspace\\SkladModule\\images\\plus.png"));
JButton btnAddCustomer = new JButton(new ImageIcon(buttonIcon));
btnAddCustomer.setText("ADD");
// btnAddCustomer.setBorder(null);
btnAddCustomer.setContentAreaFilled(false);
btnAddCustomer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AddCustomer addCustomer;
try {
addCustomer = new AddCustomer();
addCustomer.setVisible(true);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
topPanel.add(btnAddCustomer);
JButton btnNewButton_1 = new JButton("New button");
topPanel.add(btnNewButton_1);
}
public void refresh() {
TableModel model =new DefaultTableModel(data, columns);
model.insertRow(res.getRow() - 1, row);
model.addRow(row);
}
}
addcustomer.java
:
public class AddCustomer extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField plateField;
private JTextField makeField;
private JTextField modelField;
private JTextField yearField;
private JTextField engineField;
private JTextField colorField;
private JTextField ownerField;
private JTextField ownerPhoneField;
Connection connection = null;
public AddCustomer() throws IOException {
setResizable(false);
setType(Type.POPUP);
setTitle("ADD CUSTOMER");
setBounds(100, 100, 700, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
getContentPane().setLayout(new BorderLayout(0, 0));
addWindowListener((WindowListener) new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
String ObjButtons[] = { "Yes", "No" };
int PromptResult = JOptionPane.showOptionDialog(null, "Are you sure you want to exit?", "SkladModule",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, ObjButtons, ObjButtons[1]);
if (PromptResult == 0) {
dispose();
}
}
});
JPanel leftPanel = new JPanel();
leftPanel.setBorder(BorderFactory.createTitledBorder(" CAR INFO "));
getContentPane().add(leftPanel, BorderLayout.WEST);
leftPanel.setLayout(new MigLayout("", "[left][][grow,left]", "[][][][][][][][][]"));
JLabel lblPlate = new JLabel("Plate: *");
leftPanel.add(lblPlate, "cell 0 1,alignx trailing");
plateField = new JTextField();
leftPanel.add(plateField, "cell 2 1,growx");
plateField.setColumns(10);
JLabel lblMake = new JLabel("Make: *");
leftPanel.add(lblMake, "cell 0 2,alignx trailing");
makeField = new JTextField();
leftPanel.add(makeField, "cell 2 2,growx");
makeField.setColumns(10);
JLabel lblModel = new JLabel("Model: *");
leftPanel.add(lblModel, "cell 0 3,alignx trailing");
modelField = new JTextField();
leftPanel.add(modelField, "cell 2 3,growx");
modelField.setColumns(10);
JLabel lblYear = new JLabel("Year: *");
leftPanel.add(lblYear, "cell 0 4,alignx trailing");
yearField = new JTextField();
leftPanel.add(yearField, "cell 2 4,growx");
yearField.setColumns(10);
JLabel lblEngCC = new JLabel("Engine size (cc): *");
leftPanel.add(lblEngCC, "cell 0 5,alignx trailing");
engineField = new JTextField();
leftPanel.add(engineField, "cell 2 5,growx");
engineField.setColumns(10);
JLabel lblColor = new JLabel("Color: *");
leftPanel.add(lblColor, "cell 0 6,alignx trailing");
colorField = new JTextField();
leftPanel.add(colorField, "cell 2 6,growx");
colorField.setColumns(10);
JLabel lblNewLabel = new JLabel("* Required fields");
leftPanel.add(lblNewLabel, "cell 2 8");
JPanel rightPanel = new JPanel();
rightPanel.setBorder(BorderFactory.createTitledBorder(" CLIENT INFO "));
getContentPane().add(rightPanel, BorderLayout.CENTER);
rightPanel.setLayout(new MigLayout("", "[100px:n,trailing][250px:300px:500,trailing]", "[][][][][grow]"));
JLabel lblOwnerName = new JLabel("Car owner names: *");
rightPanel.add(lblOwnerName, "cell 0 1,alignx trailing");
ownerField = new JTextField();
rightPanel.add(ownerField, "cell 1 1,growx");
ownerField.setColumns(10);
JLabel lblOwnerPhone = new JLabel("Car owner telephone: *");
rightPanel.add(lblOwnerPhone, "cell 0 2,alignx trailing");
ownerPhoneField = new JTextField();
rightPanel.add(ownerPhoneField, "cell 1 2,growx");
ownerPhoneField.setColumns(10);
JLabel lblNotes = new JLabel("Notes: ");
rightPanel.add(lblNotes, "cell 0 3,alignx trailing,aligny top");
JTextArea notesField = new JTextArea(16, 58);
notesField.setWrapStyleWord(true);
notesField.setLineWrap(true);
notesField.setBorder(BorderFactory.createLineBorder(Color.lightGray));
JScrollPane scrollNotes = new JScrollPane(notesField);
scrollNotes.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
rightPanel.add(scrollNotes, "cell 1 3,grow");
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(bottomPanel, BorderLayout.SOUTH);
BufferedImage saveButtonIcon = ImageIO
.read(new File("C:\\Users\\User\\eclipse-workspace\\SkladModule\\images\\accept.png"));
JButton save_btn = new JButton(new ImageIcon(saveButtonIcon));
save_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
/*
* if (plateField.getText().isBlank() || makeField.getText().isBlank() ||
* modelField.getText().isBlank() || yearField.getText().isBlank() ||
* engineField.getText().isBlank() || colorField.getText().isBlank() ||
* ownerField.getText().isBlank() || ownerPhoneField.getText().isBlank()) {
*
* JOptionPane.showMessageDialog(null, "* required fields incomplete. Please
* review and resubmit", "Incomplete data", JOptionPane.WARNING_MESSAGE);
*
* } else {
*/
connection = MysqlConnect.dbConnector();
try {
String query = "INSERT INTO vehicles (plate, make, model, year, engine_cc, color, vehicle_owner, vehicle_owner_contact, notes) VALUES ('"
+ plateField.getText() + "','" + makeField.getText() + "','" + modelField.getText() + "','"
+ yearField.getText() + "','" + engineField.getText() + "','" + colorField.getText() + "','"
+ ownerField.getText() + "','" + ownerPhoneField.getText() + "','" + notesField.getText()
+ "')";
PreparedStatement pst = connection.prepareStatement(query);
pst.executeUpdate(query);
MainProgram main = new MainProgram();
main.refresh();
JOptionPane.showMessageDialog(null, "Data was saved", "SUCCESS", JOptionPane.INFORMATION_MESSAGE);
dispose();
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "SQLException: " + e1.getMessage(), "ERROR",
JOptionPane.ERROR_MESSAGE);
}
/* } */
}
});
save_btn.setText("SAVE");
save_btn.setBorder(null);
save_btn.setContentAreaFilled(true);
save_btn.setToolTipText("SAVE");
bottomPanel.add(save_btn);
Component horizontalStrut = Box.createHorizontalStrut(25);
bottomPanel.add(horizontalStrut);
BufferedImage cancelButtonIcon = ImageIO
.read(new File("C:\\Users\\User\\eclipse-workspace\\SkladModule\\images\\remove.png"));
JButton cancel_btn = new JButton(new ImageIcon(cancelButtonIcon));
cancel_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
cancel_btn.setText("CANCEL");
cancel_btn.setBorder(null);
cancel_btn.setContentAreaFilled(false);
cancel_btn.setToolTipText("CANCEL");
cancel_btn.setHorizontalAlignment(SwingConstants.RIGHT);
bottomPanel.add(cancel_btn);
Component horizontalStrut_1 = Box.createHorizontalStrut(20);
bottomPanel.add(horizontalStrut_1);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能有多种方法可以实现这一目标,但是它们基本上都归结为同一事物,即模态对话框。参见如何进行对话有关更多详细信息。
您应该避免从顶级容器延伸,例如
jframe
(和jdialog
)。您不会在课程中添加任何新功能,而是将自己锁定到一个用例中。以下示例旨在显示您如何使用模态对话框向用户询问输入。通过相同的“黑魔法”,当您显示模式对话框时,代码执行将在对话框可见时停止并在关闭时恢复(不要问,我不在乎,它只是有效)。
这意味着您可以提出一个对话框,然后等待直到关闭,然后继续做出您需要做的任何决定。
您可以...
使用
joptionpane
,它是整洁且方便的API,用于对话。您可以...
如果您需要更灵活的东西或想要更详细的验证,则可以滚动自己的对话框(和验证工作流),但是您应该看看启用按钮状态的一种手段,并且仍然使用
joptionpane
。There are a number of ways you might achieve this, but they all basically boil down to the same thing, a modal dialog. See How to Make Dialogs for more details.
You should avoid extending from top level containers like
JFrame
(andJDialog
). You're not adding any new functionality to the class and are locking yourself into a single use case.The following examples are intended to show how you ask users for input by using modal dialogs. Through same "black magic", when you show a modal dialog, the code execution will stop while the dialog is visible and resume when it's closed (don't ask, I don't care, it just works).
This means you can present a dialog and then wait till it's closed and then carry on making what ever decisions you need to.
You could...
Make use
JOptionPane
, which is neat and handy API for making, well, dialogs.You could...
If you need something more flexible or want to more detailed validation, you could roll your own dialog (and validation workflows), but you should have a look at Disable ok button on JOptionPane.dialog until user gives an input, which demonstrates a means by which you could control the
enabled
state of the buttons and still make use of aJOptionPane
.