我正在尝试构建GUI,我有一组单选按钮,并且我希望滑块仅在按下特定的单选按钮时才显示
我已将包含滑块的面板的可见性设置为false,但是我无法到达AddVehicleDialog
类之外的面板(因为它是该类的局部变量),因此我需要访问它在MyActionListener
类中。
我尝试使用getRootPane()
来获取添加了滑块的面板,但是它返回了null
。
//AddVehicleDialog.java class
public class AddVehicleDialog extends JDialog {
// All of the addVehicleDialog buttons, radio buttons and sliders
JButton okButton, cancelButton;
static JRadioButton redButton, grnButton, whtButton, svrButton;
static JRadioButton benzineCar, solarCar, bikeRadButton, carriageRadButton;
JSlider gearsSlider;
public AddVehicleDialog() {
setTitle("Add a vehicle to the city");
setLayout(new BorderLayout());
setSize(550, 300);
setResizable(false);
setLocationRelativeTo(null);
setModal(true);
// OK & Cancel buttons & radio buttons
addVehicleDialogButtons();
}
//bike's gears slider - part of addVehicleDialogButtons() method;
gearsSlider = new JSlider(0, 10);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
JLabel gearsLabel = new JLabel("Choose bike's gears");
gearsLabel.setHorizontalAlignment(JLabel.CENTER);
gearsLabel.setVerticalAlignment(JLabel.CENTER);
centerPanel.add(gearsLabel);
gearsSlider.setMajorTickSpacing(2);
gearsSlider.setMinorTickSpacing(1);
gearsSlider.setPaintTicks(true);
gearsSlider.setPaintLabels(true);
gearsSlider.setExtent(0);
centerPanel.add(gearsSlider,BorderLayout.SOUTH);
centerPanel.setVisible(false);
this.add(centerPanel,BorderLayout.CENTER);
//MyActionListener class is in a different file from centerPanel component
public class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
.
.
.
case "OK":
if (AddVehicleDialog.bikeRadButton.isSelected()) {
//this is what i want to do
centerPanel.setVisible(true);
}
我知道我无法到达centerPanel
,因为它是AddVehicleDialog
类的局部变量。
我已经将gearsSlider
设为静态,因此我可以在MyActionListener
课堂上与他接触
我认为将centerPanel
设置为静态不是一个好习惯,但是我想不出其他方法来在课堂之外到达这个特定的小组。
我希望它是可以理解的。如果需要更多说明,请告知,我会提供。
可见性设置为false时的面板:
当我选择“自行车”单选按钮时,希望面板显示的方式。