我有一个 JFrame,在其中创建和从外部类中删除面板,问题是,当我来回移动时(多次删除和创建面板,我不想引用所有面板、所有数据)应该传递(框架和 boolean 值[即将实现])将在构造函数中)它向下移动整个内容。
我正在使用GridBagLayout
,也许它有一些隐藏的问题。我不想使用CardLayout,所以请不要推荐它。
为什么会这样?我应该怎样做才能阻止它?
代码
deleteContract = new JButton("Usuń kontrakt");
deleteContract.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ACDeleteContract ACDeleteContract = new ACDeleteContract(frame);
removeAll();
add(ACDeleteContract);
revalidate();
repaint();
}
});
deleteContract.setPreferredSize(new Dimension(200, 50));
c.gridy = 2;
menu.add(deleteContract, c);
back = new JButton("Powrót");
back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ACMenu menu = new ACMenu(frame);
removeAll();
add(menu);
revalidate();
repaint();
}
});
最佳答案
嗯,安德鲁·汤普森引导我走上了一条我之前不想走的好路。
给后代一些提示:D。
在框架中执行的操作
CardLayout cards = new CardLayout();
JPanel cardPanel = new JPanel();
cardPanel.setLayout(cards);
ACReadContract ACReadContract = new ACReadContract(cards, cardPanel);
//your external JPanel classes with arguments such as above
ACMenu ACMenu = new ACMenu(cards, cardPanel);
cardPanel.add(ACMenu, "Menu");
cardPanel.add(ACReadContract, "ReadContract");
//naming and adding them for easy moving between them
//adding this to frame
add(cardPanel);
在外部类中(构造函数的开头,类应该扩展 JPanel)
private JPanel menu, cardPanel1;
private CardLayout cardLayout1;
public ACMenu(CardLayout cardLayout, JPanel cardPanel) {
cardLayout1=cardLayout;
cardPanel1 = cardPanel;
外部类中的实际监听器
cardLayout1.next(cardPanel1);
或
cardLayout1.show(cardPanel1, "ReadContract");
我希望我能帮助那些有类似问题的人。
关于java - JFrame、删除和创建 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897017/