如何到达某个JSlider的面板?

时间:2019-04-16 12:50:42

标签: java swing jslider

我正在尝试构建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时的面板:

当我选择“自行车”单选按钮时,希望面板显示的方式。

0 个答案:

没有答案