Как добраться до панели определенного JSlider? - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь создать графический интерфейс, у меня есть набор переключателей, и я хочу, чтобы ползунок отображался только при нажатии определенной переключателя

Я установил видимость панели, которая содержитползунок на 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:

image

Способ, которым я хочу, чтобы панельПосмотрите, когда я выбираю радиокнопку Bike.

image

...