我的框架中有2个面板,1个用于按钮(我想使用radioButton,但现在使用按钮更容易),另一个用于卡片布局面板。当我按下特定按钮时,我的计划是洗漱chad。就像移动按钮会显示移动面板卡。移动面板卡有x0标签和文本字段,线路面板卡有x0和x1标签和文本字段。
有2个类,1个用于buttonpanel = Buttons 另一个是卡片= PanelMiddle 这是我的代码:
public class PanelMiddle{
JPanel controlPanel = new JPanel();
CardLayout cl = new CardLayout();
JPanel movePanel = new JPanel();
JPanel linePanel = new JPanel();
JLabel x0Label = new JLabel("x0");
JTextField x0TextField = new JTextField(3);
JLabel x1Label = new JLabel("x1");
JTextField x1TextField = new JTextField(3);
public PanelMiddle(){
controlPanel.setLayout(cl);
//move panel
movePanel.setLayout(new GridLayout (1,2));
movePanel.add(x0Label);
movePanel.add(x0TextField);
controlPanel.add(movePanel,"Move"); //add the keyword Move to show the move card
//line panel
linePanel.setLayout(new GridLayout (2,2));
//linePanel.add(x0Label);
linePanel.add(x1Label);
//linePanel.add(x0TextField);
linePanel.add(x1TextField);
controlPanel.add(linePanel,"Line"); // add the keyword Line to show the line card
}
}
在我的其他课程中:
public class Buttons extends PanelMiddle{
JPanel buttonPanel = new JPanel();
JButton moveB = new JButton ("Move");
JButton lineB = new JButton ("Line");
public Buttons(){
buttonPanel.setLayout(new GridLayout (2,1));
buttonPanel.add(moveB);
buttonPanel.add(lineB);
action();
}
public void action(){
moveB.addActionListener((e) -> {
cl.show(controlPanel,"Move");
});
lineB.addActionListener((e) -> { cl.show(controlPanel,"Line");});
}
}
我得到的结果很奇怪。它没有完全显示我的面板。但是,当我尝试评论所有线路面板时,它的工作原理。有人有解决方法吗?
注意:对不起,我不知道如何编辑这里的文字,所以它有点凌乱。
编辑1:正如guleryuz所说,我在线路面板中注释掉x0Label
和x0TextField
答案 0 :(得分:1)
在swing组件层次结构中,组件只能添加到一个容器中,您要在两个面板中添加x0Label和x0TextField两个。因此,当您添加x0Labe两个第二个面板(linePanel)时,它将从movePanel中移除(x0TextField的情况相同),因此movePanel变为空。
更多详情here