Я пытаюсь создать графический интерфейс, у меня есть набор переключателей, и я хочу, чтобы ползунок отображался только при нажатии определенной переключателя
Я установил видимость панели, которая содержитползунок на 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:
Способ, которым я хочу, чтобы панельПосмотрите, когда я выбираю радиокнопку Bike.