i am design swing desktop application for restaurant in which i need menu groups forward or go back required two button Next/Prev
just i make Next/Prev buttons that forward or go back this is not work correctly my code like a make pagination buttons my menu group not work correct.
following image screen shot
Global Variables
public Connection con;
public PreparedStatement pst;
public ResultSet rs;
int totalRecord;
private int pageIndex = 0;
int pageSize = 5;
int pageSize1 = 6;
Menu Group Function code
public void loadgroup(int category_id) {
// this.pageIndex1 = page;
try {
Connection con5 = connectionDB.conDb();
String s2 = "SELECT id, name,btn_color,text_color FROM `menu_group` where cat_id='" + category_id + "'";
PreparedStatement pst2 = con5.prepareStatement(s2);
ResultSet rs2 = pst2.executeQuery();
groupPnl.removeAll();
revalidate();
// Connection con4 = connectionDB.conDb();
// String test1 = "SELECT COUNT(*)as rowCounts from menu_group";
// PreparedStatement pst3 = con5.prepareStatement(test1);
// ResultSet rs3 = pst3.executeQuery();
// int dbss = rs3.getInt("rowCounts");
if (rs2.next() == false) {
groupPnl.removeAll();
groupPnl.revalidate();
groupPnl.repaint();
groupPnl.setVisible(false);
right.setVisible(false);
left.setVisible(false);
} else {
groupPnl.revalidate();
groupPnl.setVisible(true);
right.setVisible(true);
left.setVisible(true);
do {
// rs2.first();
String a1 = rs2.getString(2);
String a2 = rs2.getString(1);
int a3 = rs2.getInt("btn_color");
int a4 = rs2.getInt("text_color");
PosButton btn = new PosButton();
btn.setText(a1);
btn.setVerticalAlignment((int) JButton.CENTER_ALIGNMENT);
btn.applyComponentOrientation(getComponentOrientation());
btn.setFocusPainted(false);
btn.setFocusable(false);
btn.setRequestFocusEnabled(false);
btn.setMaximumSize(new Dimension(80, 80));
btn.setPreferredSize(new Dimension(40, 35));
btn.setMinimumSize(new Dimension(80, 80));
btn.setFocusPainted(true);
btn.setBorderPainted(true);
btn.setBackground(new Color(a3, true));
btn.setForeground(new Color(a4, true));
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn.setSelected(true);
System.out.println(a1 + ":");
btn.isSelected();
int idss = Integer.parseInt(a2);
// loadbtn();
}
});
//String a2 = rs.getString(2);
btn.setHorizontalAlignment(SwingConstants.CENTER);
btn.setHorizontalTextPosition(AbstractButton.CENTER);
btn.setVerticalTextPosition(AbstractButton.BOTTOM);
groupPnl.add(btn);
groupPnl.repaint();
groupPnl.revalidate();
}while (rs2.next());
}
} catch (SQLException e) {
e.getStackTrace();
}
}
Next Button Event Code
try {
Connection con = connectionDB.conDb();
String sql = "select COUNT(id) as ids from menu_cat";
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
gid.setText(rs.getString("ids"));
}
double ab = Double.parseDouble(gid.getText());
double sm = ab / pageSize1;
int ch = (int) sm;
if (ch >= pageIndex1) {
loadgroup(pageIndex1++);
System.out.println(pageIndex1++);
} else {
pageIndex1 = 0;
loadgroup(pageIndex1++);
//nxt.setEnabled(false);
// pageIndex = 0;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
Prev Button Event Required
pageIndex1 = 0;
loadPage(pageIndex1--);
nxt.setEnabled(true);
Menu Category Load
private void loadPage(int page) {
this.pageIndex = page;
try {
// Customize page size here
Connection con = (Connection) connectionDB.conDb();
String sl = "SELECT id , name,translated_name ,btn_color,text_color FROM `menu_cat` LIMIT ? OFFSET ? ";
PreparedStatement pst = (PreparedStatement) con.prepareStatement(sl);
pst.setInt(1, pageSize);
pst.setInt(2, pageSize * page);
ResultSet rs = pst.executeQuery();
cat_panel.removeAll();
while (rs.next()) {
totalRecord = rs.getInt(1);
String a1 = rs.getString("name");
int getid = rs.getInt(1);
String a00 = rs.getString("translated_name");
int a3 = rs.getInt("BTN_COLOR");
int a4 = rs.getInt("text_COLOR");
PosButton btn = new PosButton();
btn.setText("
" + a1 + "
" + getid + "
");btn.setVerticalAlignment((int) CENTER_ALIGNMENT);
btn.applyComponentOrientation(getComponentOrientation());
btn.setFocusPainted(false);
btn.setFocusable(false);
btn.setToolTipText(a00);
btn.setRequestFocusEnabled(false);
btn.setMaximumSize(new Dimension(80, 80));
btn.setPreferredSize(new Dimension(60, 60));
btn.setMinimumSize(new Dimension(80, 80));
btn.setBackground(new Color(a3, true));
btn.setForeground(new Color(a4, true));
btn.setFocusPainted(true);
btn.setBorderPainted(true);
btn.setSelected(true);
//String a2 = rs.getString(2);
btn.setHorizontalAlignment(SwingConstants.CENTER);
btn.setHorizontalTextPosition(AbstractButton.CENTER);
btn.setVerticalTextPosition(AbstractButton.BOTTOM);
// cat_panel.setLayout(new MigLayout("fill, wrap 1 0"));
// cat_panel = new JPanel(new MigLayout("fill, wrap 1, insets 0"));
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btn.setSelected(true);
btn.isSelected();
loadgroup(getid);
//loadgroupss(getid);
System.out.println(a1 + ":\t");
}
});
cat_panel.add(btn, "center");
//add(cat_panel, "grow y");
cat_panel.repaint();
cat_panel.revalidate();
}
} catch (SQLException e) {
}
}
解决方案
When you need to learn something new or fix something which is not working as expected it is often much easier to do it on a smaller scale, rather than on you application.
This goes in line with SO requirement of posting mre when asking or answering.
Your question is essentially how to change JPanels in their container, and the following code demonstrates just that, and nothing else:
import java.awt.*;
import javax.swing.*;
public class CardLayoutPrevNextDemo extends JPanel {
private final CardLayout cLayout;
private final JPanel cardsPane;
private static int MAX_PAGES = 5;
private int topPageIndex = 0;
public CardLayoutPrevNextDemo(){
cardsPane = new JPanel();
cLayout = new CardLayout();
cardsPane.setLayout(cLayout);
addPages();
changePane();
JButton prevPage = new JButton("Prev");
prevPage.addActionListener(e -> showPrevPane());
JButton nextPage = new JButton("Next");
nextPage.addActionListener(e -> showNextPane());
JPanel buttonsPane = new JPanel(new BorderLayout());
buttonsPane.add(prevPage,BorderLayout.WEST);
buttonsPane.add(nextPage,BorderLayout.EAST);
setLayout(new BorderLayout());
add(cardsPane,BorderLayout.CENTER);
add(buttonsPane,BorderLayout.NORTH);
}
private void addPages() {
for(int i = 0; i < MAX_PAGES ; i++){
JPanel pane = new JPanel();
String pageName = String.valueOf(i);
setPreferredSize(new Dimension(400,200));
pane.add(new JLabel("Page # "+pageName));
cardsPane.add(pageName, pane);
}
}
void showNextPane() {
topPageIndex = topPageIndex + 1 >= MAX_PAGES ? 0: topPageIndex + 1;
changePane();
}
void showPrevPane() {
topPageIndex = topPageIndex - 1 < 0 ? MAX_PAGES -1 : topPageIndex - 1;
changePane();
}
void changePane() {
cLayout.show(cardsPane, String.valueOf(topPageIndex));
}
public static void main(String[] args) {
JFrame frame = new JFrame("Card Layout Prev Next Demo");
frame.setSize(400,250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.add(new CardLayoutPrevNextDemo());
frame.pack();
frame.setVisible(true);
}
}