我目前正在尝试将作为额外信用的作业的GUI编码为学习机会。我需要一个按钮菜单,每个按钮有效地更改主面板以输入或显示数据。现在,我有一个名为buttonContainer
的类,它包含主菜单,mainPanel
,它包含整个GUI的主面板。基本上我需要一种方法让buttonContainer
添加和删除其父级mainPanel
中的元素 - 其中两个元素保留为单独的文件。
我的buttonContainer
课程如下:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class buttonPanel extends JPanel implements ActionListener
{
private JButton load, save, list, find, input, sort, exit;
private JPanel BtnContainer, parent;
private newContactPanel newContact;
public buttonPanel()
{
load = new JButton("Load Contacts");
save = new JButton("Save Contacts");
list = new JButton("List Contacts");
find = new JButton("Find Contact");
sort = new JButton("Sort Contacts");
input = new JButton("New Contact");
exit = new JButton("Exit Program");
newContact = new newContactPanel();
parent = this.getParent();
BtnContainer = new JPanel();
BtnContainer.setLayout(new GridLayout(0,1));
BtnContainer.add(load);
BtnContainer.add(save);
BtnContainer.add(list);
BtnContainer.add(sort);
BtnContainer.add(find);
BtnContainer.add(input);
BtnContainer.add(exit);
add(BtnContainer);
}
@Override
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == input)
{
//Change panel command here
}
}
}
mainPanel
代码如下所示:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class mainPanel extends JPanel //implements ActionListener
{
private buttonPanel MainMenu;
private newContactPanel newContact;
private JPanel wrapper;
public mainPanel()
{
wrapper = new JPanel();
this.setLayout(new BorderLayout());
wrapper.setLayout(new BorderLayout());
MainMenu = new buttonPanel();
newContact = new newContactPanel();
wrapper.add(MainMenu, BorderLayout.WEST);
add(wrapper, BorderLayout.WEST);
}
}
contactPanel
是一个不同的面板,我希望buttonPanel
触发mainPanel
来展示。是否有任何简单的方法可以像这样重新定义父类,同时保持两个类分开?
我之前已经知道这个问题的变体,但是,我在这里看到的任何内容似乎都没有完成我想要的。其中有几个并不完全符合我的要求 - 大多数都是来自同一个文件。有几个使用了getParent()
- 但如果我尝试使用它,它只会抓取Container
,而不是JPanel
。
答案 0 :(得分:0)
你可以使包装器公共静态
public static JPanel wrapper;
然后从buttonPanel你可以使用这个代码
mainPanel.wrapper.remove(<whatever component>);
mainPanel.wrapper.add(<whatever component>);
mainPanel.wrapper.validate();
mainPanel.wrapper.repaint();
我认为这会有用
答案 1 :(得分:0)
基本上我需要一种方法让buttonContainer从其父级mainPanel添加和删除元素,其中剩下两个元素 单独的文件。
您可以在ButtonContainer
课程中使用SwingUtilities.getAncestorOfClass(class, comp),因为您知道该课程属于该课程的孩子。例如:
class ButtonContainer extends JPanel implements ActionListener {
...
@Override
public void actionPerformed(ActionEvent e) {
MainPanel mainPanel = (MainPanel)SwingUtilities.getAncestorOfClass(MainPanel.class, ButtonContainer.this);
if (mainPanel != null) {
// Change panel command here
}
}
}
请阅读Java Code Conventions并坚持下去。类&#39;名字以大写字母开头;变量和方法名称以小写字母开头。