Я работаю над этим в течение двух дней, и я до сих пор не могу понять это. Так у меня есть эти классы:Boolean не возвращает правильное значение
- MyContentPane
- ParametersPanel
- ControlsPanel
Первый класс выглядит следующим образом:
public class MyContentPane extends JPanel{
private ParametersPanel parametersPanel;
private ControlsPanel controlPanel;
private CashRegistersPanel cashRegistersPanel;
public MyContentPane() {
parametersPanel = new ParametersPanel();
controlPanel = new ControlsPanel(parametersPanel);
cashRegistersPanel = new CashRegistersPanel();
this.setLayout(null);
this.add(controlPanel);
this.add(parametersPanel);
this.add(cashRegistersPanel);
controlPanel.setBounds(0, 0, 300, 250);
parametersPanel.setBounds(0, 250, 300, 450);
cashRegistersPanel.setBounds(300, 0, 1500, 700);
this.setPreferredSize(new Dimension(1800,700));
}
}
Второй класс выглядит следующим образом:
public class ParametersPanel extends JPanel{
private ControlsPanel controlsPanel;
private JButton reset;
public ParametersPanel() {
controlsPanel = new ControlsPanel(this);
this.setBackground(new Color(219,221,255));
reset = new JButton("Reset parameters");
reset.setFont(new Font("Arial", Font.BOLD, 14));
this.setLayout(null);
this.add(reset);
reset.setBounds(10, 245, 280, 30);
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
boolean startIsPressed = controlsPanel.StartisPressed();
System.out.println("Boolean: " + startIsPressed);
}
});
}
Последний класс:
public class ControlsPanel extends JPanel{
private JButton start;
private JButton stop;
private boolean startIsPressed;
public ControlsPanel(final ParametersPanel panel) {
start = new JButton("Start");
stop = new JButton("Stop");
start.setFont(new Font("Arial", Font.BOLD, 14));
stop.setFont(new Font("Arial", Font.BOLD, 14));
this.setLayout(null);
this.setBackground(new Color(199,202,255));
this.add(start);
this.add(stop);
start.setBounds(10, 10, 280, 30);
stop.setBounds(10, 50, 280, 30);
stop.setEnabled(false);
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (start.getText().equals("Start")) {
start.setText("Pause");
stop.setEnabled(true);
startIsPressed = true;
System.out.println("Start Button boolean value: " + startIsPressed + stringStartIsPressed);
}
});
public boolean StartisPressed() {
return startIsPressed;
}
Теперь проблема в том, что когда я нажимаю на кнопку Start в ControlsPanel, значение булева оказывается, чтобы правда. Но когда я задаю значение этого булева в ParametersPanel, нажав кнопку сброса, он возвращает false. Я обнаружил, что если я изменить порядок панели decleration в первом классе (MyContentPane), я решить эту проблему, но я не могу попросить булевы в ControlsPanel ...
Добавлен еще один класс
public class CashRegistersPanel extends JPanel{
private Image img;
private int amount;
private ParametersPanel parametersPanel;
private ControlsPanel controlsPanel;
private boolean startIsPressed;
public CashRegistersPanel() {
parametersPanel = new ParametersPanel();
startIsPressed = controlsPanel.StartisPressed();
this.setBackground(new Color(237,237,237));
this.setLayout(null);
CashRegister cashRegister = new CashRegister();
img = cashRegister.getImg();
amount = parametersPanel.getAmountOfRegisters();
}
public void setControlsPanel(ControlsPanel cp) {
controlsPanel = cp;
}
Я изменил MyContentPane, как вы, ребята предложили и добавил что-то еще:
public class MyContentPane extends JPanel{
private ParametersPanel parametersPanel;
private ControlsPanel controlPanel;
private CashRegistersPanel cashRegistersPanel;
public MyContentPane() {
parametersPanel = new ParametersPanel();
controlPanel = new ControlsPanel(parametersPanel);
parametersPanel.setControlsPanel(controlPanel);
cashRegistersPanel = new CashRegistersPanel(parametersPanel, controlPanel);
Спасибо, ребята, вопрос решен!
Это действительно помогло мне поблагодарить вас за это, но я попробовал то же самое для своего CashRegisterpanel, но это не помогло. Не возражаете ли вы тоже взглянуть на это? – Mirwais
О, не возражаете! Я только что добавил в MyContentPane в CahRegisterPanel (ParametersPanel, controlPanel). Спасибо, в любом случае! – Mirwais