This feed narrates how to search for a record in a JTabbedPane. The search results are displayed in tabular form using JTable. To download these java files, please click on corresponding filename. Lets drill down, to the code.
Here are the snapshots of OrderView Application- OrderView - Main class, which calls out layout design. (i.e UI)
- ItemTabelModel - An abstract table model, to display search results in tabular form
- OrderDAO - Takes care of DB interaction, I have used MySQL
- OrderInfo - A class to demonstrate order object
- Creates JTabbedPane with four panels - Create, Edit, Delete & Search
- Searches for record in DB using OrderDAO class
- Search is invoked by "Enter" key as well as "Search" button
- Zero & Empty search results are handled
- Search result-set size need not be one.
- Implements listeners for KeyTyped, KeyPressed and KeyReleased events
- Display search results in tabular form using JTable
- Snippet shared here is confined to "Search" tab, other tabs are not designed
public class OrderView implements ActionListener {
ArrayList orderList;
OrderDAO oDAO; <- For DB interaction
JFrame appFrame;
JLabel jlbName, jlbItem;
JTextField jtfName,jtfDate;
JTabbedPane appPane;
JButton jbbSave, jbnDelete, jbnClear, jbnUpdate, jbnSearch;
JTable jtbOrder;
JScrollPane sp;
JPanel jPaneCreate,jPaneEdit,jPaneDelete,jPaneSearch;
String name, address, email;
int recordNumber;
String nameStr;
private ItemTableModel ItemTabModel;
public static void main(String args[]){
new OrderView();
}
public OrderView()
{
createGUI();
orderList = new ArrayList();
oDAO=new OrderDAO();
}
public void createGUI(){
/*Create a frame, get its contentpane and set layout*/
appFrame = new JFrame("View your order status");
appPane=new JTabbedPane();
jPaneCreate=new JPanel(new GridLayout(5,2));
jPaneEdit=new JPanel(new GridLayout(5,2));
jPaneDelete=new JPanel(new GridLayout(5,2));
jPaneSearch=new JPanel(new GridLayout(5,2));
appPane.setTabPlacement(JTabbedPane.LEFT);
appFrame.getContentPane().add(appPane);
appPane.add("Create New",jPaneCreate);
appPane.add("Edit/Update",jPaneEdit);
appPane.add("Delete",jPaneDelete);
appPane.add("Search",jPaneSearch);
//set shortcuts for each tab
appPane.setMnemonicAt(0 , KeyEvent.VK_C);
appPane.setMnemonicAt(1 , KeyEvent.VK_E);
appPane.setMnemonicAt(2 , KeyEvent.VK_D);
appPane.setMnemonicAt(3 , KeyEvent.VK_S);
//Arrange components on contentPane and set Action Listeners to each JButton
arrangeComponentsCreate();
arrangeComponentsEdit();
arrangeComponentsDelete();
arrangeComponentsSearch();
appFrame.pack();
appFrame.setVisible(true);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void arrangeComponentsSearch() {
jlbName = new JLabel("Customer Name");
jlbItem = new JLabel("Item Ordered");
jtfName=new JTextField(20);
jtfDate=new JTextField(20);
//listeners ensure typed search strings are converted to uppercase, as & when key typed
jtfName.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e) {
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
public void keyTyped(KeyEvent e) {
// TODO: Do something for the keyTyped event
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
//Invoke search person on "Enter" button event
public void keyPressed(KeyEvent e) {
// TODO: Do something for the keyPressed event
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
if (e.getKeyCode()== KeyEvent.VK_ENTER )
{
searchPerson();
}
}
});
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.CENTER);
jPaneSearch.add(getFieldPanel(),c);
setMyConstraints(c,0,1,GridBagConstraints.CENTER);
jPaneSearch.add(getButtonPanelSearch(),c);
jtbOrder=new JTable();
ItemTabModel=new ItemTableModel();
jtbOrder.setModel(ItemTabModel);
sp=new JScrollPane(jtbOrder);
jbnSearch.addActionListener(this);
}
public void actionPerformed (ActionEvent e){
if (e.getSource() == jbnSearch)
searchPerson();//clicking search button should invoke searchPerson() function
}
private JPanel getButtonPanelSearch() {
//Search Button
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.CENTER);
p.add(jbnSearch,c);
return p;
}
private JPanel getFieldPanel() {
JPanel p = new JPanel(new GridBagLayout());
p.setBorder(BorderFactory.createTitledBorder("Details"));
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.EAST);
p.add(jlbName,c);
setMyConstraints(c,1,0,GridBagConstraints.WEST);
p.add(jtfName,c);
setMyConstraints(c,0,1,GridBagConstraints.EAST);
p.add(jlbItem,c);
setMyConstraints(c,1,1,GridBagConstraints.WEST);
p.add(jtfDate,c);
return p;
}
private static void setMyConstraints(GridBagConstraints c,
int gridx, int gridy, int anchor) {
c.gridx = gridx;//manages the layout of controls
c.gridy = gridy;
c.anchor = anchor;
}
public void searchPerson() {
name = jtfName.getText();
/*clear contents of arraylist if there are any from previous search*/
orderList.clear();
recordNumber = 0;
if(name.equals("")){
JOptionPane.showMessageDialog(null,"Please enter person name to search.");
//when a empty string is searched
clear();
}
else{
/*get an array list of searched persons using PersonDAO*/
orderList = oDAO.searchPerson(name);
if(orderList.size() == 0){
JOptionPane.showMessageDialog(null, "No records found.");
//Perform a clear if no records are found.-Refer screenshot
clear();
}
else
{
//Erasing previous history
recordNumber=orderList.size();
ItemTabModel.removeall();
jPaneSearch.remove(jtbOrder);
jPaneSearch.remove(sp);
jPaneSearch.repaint();
//If there are more search results, display all in tabular form
while(recordNumber>0)
{
/*downcast the object from array list to OrderInfo*/
OrderInfo person = (OrderInfo) orderList.get(recordNumber-1);
ItemTabModel.addOrderInfo(person);
recordNumber--;
}
//Redraws the table
jPaneSearch.add(sp);
jPaneSearch.revalidate();
}
clear();
}
}
private void clear() {
//Clears the textbox and sets focus
jtfName.setText("");
jtfName.requestFocusInWindow();
}
}
ArrayList orderList;
OrderDAO oDAO; <- For DB interaction
JFrame appFrame;
JLabel jlbName, jlbItem;
JTextField jtfName,jtfDate;
JTabbedPane appPane;
JButton jbbSave, jbnDelete, jbnClear, jbnUpdate, jbnSearch;
JTable jtbOrder;
JScrollPane sp;
JPanel jPaneCreate,jPaneEdit,jPaneDelete,jPaneSearch;
String name, address, email;
int recordNumber;
String nameStr;
private ItemTableModel ItemTabModel;
public static void main(String args[]){
new OrderView();
}
public OrderView()
{
createGUI();
orderList = new ArrayList();
oDAO=new OrderDAO();
}
public void createGUI(){
/*Create a frame, get its contentpane and set layout*/
appFrame = new JFrame("View your order status");
appPane=new JTabbedPane();
jPaneCreate=new JPanel(new GridLayout(5,2));
jPaneEdit=new JPanel(new GridLayout(5,2));
jPaneDelete=new JPanel(new GridLayout(5,2));
jPaneSearch=new JPanel(new GridLayout(5,2));
appPane.setTabPlacement(JTabbedPane.LEFT);
appFrame.getContentPane().add(appPane);
appPane.add("Create New",jPaneCreate);
appPane.add("Edit/Update",jPaneEdit);
appPane.add("Delete",jPaneDelete);
appPane.add("Search",jPaneSearch);
//set shortcuts for each tab
appPane.setMnemonicAt(0 , KeyEvent.VK_C);
appPane.setMnemonicAt(1 , KeyEvent.VK_E);
appPane.setMnemonicAt(2 , KeyEvent.VK_D);
appPane.setMnemonicAt(3 , KeyEvent.VK_S);
//Arrange components on contentPane and set Action Listeners to each JButton
arrangeComponentsCreate();
arrangeComponentsEdit();
arrangeComponentsDelete();
arrangeComponentsSearch();
appFrame.pack();
appFrame.setVisible(true);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void arrangeComponentsSearch() {
jlbName = new JLabel("Customer Name");
jlbItem = new JLabel("Item Ordered");
jtfName=new JTextField(20);
jtfDate=new JTextField(20);
//listeners ensure typed search strings are converted to uppercase, as & when key typed
jtfName.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e) {
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
public void keyTyped(KeyEvent e) {
// TODO: Do something for the keyTyped event
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
//Invoke search person on "Enter" button event
public void keyPressed(KeyEvent e) {
// TODO: Do something for the keyPressed event
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
if (e.getKeyCode()== KeyEvent.VK_ENTER )
{
searchPerson();
}
}
});
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.CENTER);
jPaneSearch.add(getFieldPanel(),c);
setMyConstraints(c,0,1,GridBagConstraints.CENTER);
jPaneSearch.add(getButtonPanelSearch(),c);
jtbOrder=new JTable();
ItemTabModel=new ItemTableModel();
jtbOrder.setModel(ItemTabModel);
sp=new JScrollPane(jtbOrder);
jbnSearch.addActionListener(this);
}
public void actionPerformed (ActionEvent e){
if (e.getSource() == jbnSearch)
searchPerson();//clicking search button should invoke searchPerson() function
}
private JPanel getButtonPanelSearch() {
//Search Button
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.CENTER);
p.add(jbnSearch,c);
return p;
}
private JPanel getFieldPanel() {
JPanel p = new JPanel(new GridBagLayout());
p.setBorder(BorderFactory.createTitledBorder("Details"));
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.EAST);
p.add(jlbName,c);
setMyConstraints(c,1,0,GridBagConstraints.WEST);
p.add(jtfName,c);
setMyConstraints(c,0,1,GridBagConstraints.EAST);
p.add(jlbItem,c);
setMyConstraints(c,1,1,GridBagConstraints.WEST);
p.add(jtfDate,c);
return p;
}
private static void setMyConstraints(GridBagConstraints c,
int gridx, int gridy, int anchor) {
c.gridx = gridx;//manages the layout of controls
c.gridy = gridy;
c.anchor = anchor;
}
public void searchPerson() {
name = jtfName.getText();
/*clear contents of arraylist if there are any from previous search*/
orderList.clear();
recordNumber = 0;
if(name.equals("")){
JOptionPane.showMessageDialog(null,"Please enter person name to search.");
//when a empty string is searched
clear();
}
else{
/*get an array list of searched persons using PersonDAO*/
orderList = oDAO.searchPerson(name);
if(orderList.size() == 0){
JOptionPane.showMessageDialog(null, "No records found.");
//Perform a clear if no records are found.-Refer screenshot
clear();
}
else
{
//Erasing previous history
recordNumber=orderList.size();
ItemTabModel.removeall();
jPaneSearch.remove(jtbOrder);
jPaneSearch.remove(sp);
jPaneSearch.repaint();
//If there are more search results, display all in tabular form
while(recordNumber>0)
{
/*downcast the object from array list to OrderInfo*/
OrderInfo person = (OrderInfo) orderList.get(recordNumber-1);
ItemTabModel.addOrderInfo(person);
recordNumber--;
}
//Redraws the table
jPaneSearch.add(sp);
jPaneSearch.revalidate();
}
clear();
}
}
private void clear() {
//Clears the textbox and sets focus
jtfName.setText("");
jtfName.requestFocusInWindow();
}
}
Search Results | Zero Results | Empty Search string |
---|---|---|
Nice to see one more post from you. I request though why this much violence in theme.
ReplyDeleteAre you referring to blog theme?
ReplyDelete