Я прошу прощения за задержку, однако у меня есть другие, более неотложные обязательства.
Как и было обещано, здесь приведена демонстрация того, как использовать методы, содержащиеся в классе InventoryDemo , для формы , аналогичной тому, что вы отображали в своем сообщении.
Это работающее демо-приложение работает быстро, поэтому не ожидайте никакой реальной оптимизации. Это будет зависеть от вас, когда вы создадите свое собственное приложение. Простота делает для лучшего понимания.
Демонстрация, которую можно запустить (названная DB_ GUI) ниже, использует классы, предоставленные в моем предыдущем посте :
- InventoryItems Class ( InventoryItems. java)
- InventoryDemo Class ( InventoryDemo. java)
В класс InventoryDemo были внесены очень незначительные изменения, и обновление было выполнено для этого кода в моем предыдущем посте .
. Этот работающий код работает следующим образом:
Вы начинаете с пустой базы данных (без текстовых файлов). Файлы текстовых данных создаются автоматически по мере необходимости, и каждый файл представляет определенную c категорию инвентаря, например: Письменные принадлежности , Игровые приставки и др. c. Эти категории создаются с помощью редактируемого JComboBox *1044*, расположенного в верхней части окна приложения. Если в этом JComboBox имеется категория, которая не уже содержится в комбинированном списке, то она добавляется в этот список и создается файл данных для подготовки к хранению предметов инвентаря, связанных с этой указанной c категорией .
Файлы данных создаются в каталоге с именем InventoryCategories , который автоматически создается в вашей локальной файловой системе в каталоге root диска, который является вашим конкретным приложение запущено Убедитесь, что для таких действий существуют соответствующие разрешения, прежде чем пытаться запустить это демонстрационное приложение.
Для создания категорий и редактирования, добавления, сохранения или удаления данных в полях JTextFields формы Admin Доступ должен быть должен быть получен. Единственный элемент данных, который может быть изменен обычным пользователем, - это поле Количество . Чтобы go перейти в режим администратора, выберите ссылку Admin , расположенную непосредственно под таблицей JTable. Вам будет необходимо ввести пароль, который в настоящее время 1234 . Вы можете изменить этот пароль на любой другой, изменив строковое значение, содержащееся в переменной поля класса ADMIN_PASSWORD в приведенном ниже коде.
В режиме администратора:
- Чтобы отредактировать элемент инвентаризации, выберите его в таблице и затем отредактируйте все, что вам нравится, из JTextFields. Когда вы закончите редактирование и сохраните свою работу, нажмите кнопку Сохранить .
- Чтобы добавить элемент инвентаризации в текущую активную категорию, нажмите кнопку Добавить . Все JTextField's очистятся. Укажите необходимые данные в JTextFields формы, затем, когда закончите, нажмите кнопку Сохранить . Эта запись будет сохранена (добавлена) в соответствующий файл данных и помещена в JTable. Предоставление элемента ID является необязательным, поскольку, если он не указан, будет автоматически создан идентификатор с идентификатором запуска 00001 . Вы не можете предоставить повторяющиеся значения идентификатора в одной и той же категории.
- Чтобы удалить элемент инвентаря из текущей активной категории, выберите нужный элемент инвентаря в JTable, элемент будет отображаться в полях JTextFields, расположенных в нижняя часть формы. Выберите кнопку Удалить . Появится диалоговое окно подтверждения, нажмите кнопку Да , чтобы подтвердить удаление, и элемент инвентаря будет удален как из файла данных, так и из таблицы JTable.
Для отключения режима администратора :
Просто выберите ссылку Admin , расположенную в нижней части JTable. Эта ссылка переключает на go вход и выход из режима администратора.
Код приложения:
/*
Data text file names are based from the names of the categoryies
created in Form. If a 'Writing Instruments' category is created
then the data file created for that category's date will be named:
Writing Instruments.txt
If a 'Game Consoles' category is created then the data file created
for that category's date will be named:
Game Consoles.txt
and so on. Categories are created by entering a specific category
name (that DOES NOT already exist) into the Categories Drop-Down
List (comboBox).
*/
package inventorydemo;
import com.sun.glass.events.KeyEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class DB_GUI extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private final InventoryDemo demo = new InventoryDemo();
private final String ADMIN_PASSWORD = "1234";
private boolean appStarted = false;
public DB_GUI() {
initComponents();
fillCategoriesCombo();
categoryComboBox.setSelectedIndex(-1);
// Set the JTable's Header font size to match the JTable's font size.
JTableHeader header = jTable1.getTableHeader();
header.setFont(header.getFont().deriveFont((float) jTable1.getFont().getSize()));
// Center Text in JTable Header Cells.
alignJTableHeaderText(jTable1, 0);
// Set JTable's Column Widths
setJTableColumnWidths(jTable1, 13d, 62d, 15d, 10d);
// Set JTable's background color to White.
jTable1.setFillsViewportHeight(true);
jScrollPane1.getViewport().setBackground(Color.white);
// Modifying the Look & Feel
// Set JTable Header Background color to White.
UIManager.getDefaults().put("TableHeader.background", Color.WHITE);
// Remove JTable Header borders
UIManager.getDefaults().put("TableHeader.cellBorder", BorderFactory.createEmptyBorder(0, 0, 0, 0));
// Set JTextField's inactive background color to White.
UIManager.getDefaults().put("TextField.inactiveBackground", Color.WHITE);
// Key Binding for Category Combo. Passes what was entered to
// the addNewCategory() method when the ENTER key is pressed.
// Used to add new Categories.
categoryComboBox.getEditor().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
if (demo.isInAdminMode()) {
addNewCategory(categoryComboBox.getEditor().getItem().toString());
}
else {
JFrame iFrame = new JFrame();
iFrame.setAlwaysOnTop(true);
iFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
iFrame.setLocationRelativeTo(null);
JOptionPane.showMessageDialog(iFrame, "You need Admin Access to "
+ "create categories!", "Admin Required!", JOptionPane.WARNING_MESSAGE);
iFrame.dispose();
}
}
});
// Center text in ComboBox.
((JLabel) categoryComboBox.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
// Set startup focus to the Admin link.
lblAdminAccess.requestFocus();
appStarted = true;
}
@SuppressWarnings("unchecked")
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
productNameBox = new javax.swing.JTextField();
categoryComboBox = new javax.swing.JComboBox<>();
jLabel3 = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
productIDBox = new javax.swing.JTextField();
jSeparator5 = new javax.swing.JSeparator();
productPriceBox = new javax.swing.JTextField();
jSeparator6 = new javax.swing.JSeparator();
productQuantityBox = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
saveButton = new javax.swing.JButton();
doneButton = new javax.swing.JButton();
deleteButton = new javax.swing.JButton();
addButton = new javax.swing.JButton();
lblAdminAccess = new javax.swing.JLabel();
lblStatus = new javax.swing.JLabel();
jSeparator3 = new javax.swing.JSeparator();
jSeparator4 = new javax.swing.JSeparator();
lblItems = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setResizable(false);
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
jLabel1.setText("Product ID:");
jLabel1.setToolTipText("");
jLabel2.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
jLabel2.setText("Price:");
jLabel2.setToolTipText("");
jSeparator1.setBackground(new java.awt.Color(255, 51, 51));
jSeparator1.setForeground(new java.awt.Color(255, 0, 0));
jSeparator1.setToolTipText("");
jSeparator1.setName(""); // NOI18N
jSeparator1.setOpaque(true);
jSeparator1.setRequestFocusEnabled(false);
jSeparator1.setVerifyInputWhenFocusTarget(false);
productNameBox.setEditable(false);
productNameBox.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
productNameBox.setForeground(new java.awt.Color(153, 153, 153));
productNameBox.setHorizontalAlignment(javax.swing.JTextField.CENTER);
productNameBox.setToolTipText("");
productNameBox.setBorder(null);
productNameBox.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
productNameBox.setDisabledTextColor(new java.awt.Color(153, 153, 153));
productNameBox.setSelectionColor(new java.awt.Color(204, 204, 204));
categoryComboBox.setBackground(new java.awt.Color(255, 255, 255));
categoryComboBox.setEditable(true);
categoryComboBox.setForeground(new java.awt.Color(51, 51, 255));
categoryComboBox.setAutoscrolls(true);
categoryComboBox.setBorder(null);
categoryComboBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
categoryComboBoxItemStateChanged(evt);
}
});
jLabel3.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
jLabel3.setText("Quantity:");
jSeparator2.setBackground(new java.awt.Color(255, 51, 51));
jSeparator2.setForeground(new java.awt.Color(255, 0, 0));
jSeparator2.setToolTipText("");
jSeparator2.setName(""); // NOI18N
jSeparator2.setOpaque(true);
jSeparator2.setRequestFocusEnabled(false);
jSeparator2.setVerifyInputWhenFocusTarget(false);
productIDBox.setEditable(false);
productIDBox.setForeground(new java.awt.Color(153, 153, 153));
productIDBox.setToolTipText("");
productIDBox.setBorder(null);
jSeparator5.setBackground(new java.awt.Color(255, 51, 51));
jSeparator5.setForeground(new java.awt.Color(255, 0, 0));
jSeparator5.setToolTipText("");
jSeparator5.setName(""); // NOI18N
jSeparator5.setOpaque(true);
jSeparator5.setRequestFocusEnabled(false);
jSeparator5.setVerifyInputWhenFocusTarget(false);
productPriceBox.setEditable(false);
productPriceBox.setForeground(new java.awt.Color(153, 153, 153));
productPriceBox.setBorder(null);
jSeparator6.setBackground(new java.awt.Color(255, 51, 51));
jSeparator6.setForeground(new java.awt.Color(255, 0, 0));
jSeparator6.setToolTipText("");
jSeparator6.setName(""); // NOI18N
jSeparator6.setOpaque(true);
jSeparator6.setRequestFocusEnabled(false);
jSeparator6.setVerifyInputWhenFocusTarget(false);
productQuantityBox.setForeground(new java.awt.Color(0, 0, 255));
productQuantityBox.setBorder(null);
jScrollPane1.setBackground(new java.awt.Color(255, 255, 255));
jScrollPane1.setBorder(null);
jScrollPane1.setViewportBorder(null);
jScrollPane1.setOpaque(true);
jTable1.setBorder(null);
jTable1.setFont(new java.awt.Font("sansserif", 0, 11)); // NOI18N
jTable1.setForeground(new java.awt.Color(102, 102, 102));
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"ID", "Product Name", "Price", "Qty"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Double.class, java.lang.Integer.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.setFillsViewportHeight(true);
jTable1.setGridColor(new java.awt.Color(255, 255, 255));
jTable1.setOpaque(false);
jTable1.setSelectionBackground(new java.awt.Color(204, 204, 204));
jTable1.setSelectionForeground(new java.awt.Color(0, 0, 0));
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTable1MouseClicked(evt);
}
});
jTable1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTable1KeyReleased(evt);
}
});
jScrollPane1.setViewportView(jTable1);
saveButton.setText("Save");
saveButton.setEnabled(false);
saveButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveButtonActionPerformed(evt);
}
});
doneButton.setText("Done");
doneButton.setToolTipText("");
doneButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doneButtonActionPerformed(evt);
}
});
deleteButton.setText("Delete");
deleteButton.setToolTipText("");
deleteButton.setEnabled(false);
deleteButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteButtonActionPerformed(evt);
}
});
addButton.setText("Add");
addButton.setToolTipText("");
addButton.setEnabled(false);
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
lblAdminAccess.setFont(new java.awt.Font("sansserif", 0, 10)); // NOI18N
lblAdminAccess.setForeground(java.awt.Color.blue);
lblAdminAccess.setText("<html><u>Admin</u></html>");
lblAdminAccess.setToolTipText("<html> Turn Admin Mode: <font color=red>ON</font> </html> ");
lblAdminAccess.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
lblAdminAccess.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lblAdminAccessMouseClicked(evt);
}
});
lblStatus.setBackground(new java.awt.Color(255, 255, 255));
lblStatus.setFont(new java.awt.Font("sansserif", 0, 11)); // NOI18N
lblStatus.setForeground(new java.awt.Color(102, 102, 102));
lblStatus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblStatus.setText("<html>Add or select a product category (Admin required to add).</html>");
lblStatus.setToolTipText("");
lblStatus.setBorder(null);
lblStatus.setOpaque(true);
jSeparator3.setBackground(new java.awt.Color(0, 153, 153));
jSeparator3.setToolTipText("");
jSeparator4.setBackground(new java.awt.Color(0, 153, 153));
jSeparator4.setToolTipText("");
lblItems.setFont(new java.awt.Font("sansserif", 0, 11)); // NOI18N
lblItems.setText("<html>Items: <font color=blue>0</font></html>");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(50, 50, 50)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 72, Short.MAX_VALUE))
.addGap(32, 32, 32)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(productIDBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(productPriceBox, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(productQuantityBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(productNameBox, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(lblStatus)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblItems, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblAdminAccess, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 337, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(categoryComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 285, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(saveButton)
.addGap(18, 18, 18)
.addComponent(addButton)
.addGap(18, 18, 18)
.addComponent(deleteButton)
.addGap(18, 18, 18)
.addComponent(doneButton)))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
.addComponent(jSeparator3)
.addComponent(jSeparator4)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(categoryComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblAdminAccess, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblItems, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(4, 4, 4)
.addComponent(productNameBox, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(24, 24, 24)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(jLabel3))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addComponent(productIDBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(productPriceBox, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(productQuantityBox, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(saveButton)
.addComponent(doneButton)
.addComponent(deleteButton)
.addComponent(addButton))
.addGap(11, 11, 11)
.addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
setLocationRelativeTo(null);
}
Поскольку код такой большой, я предоставляю его в двух постах. Просто скопируйте / вставьте код в следующий пост прямо под этим кодом.