Suposto erro de sintaxe

Meu programa dá a seguinte mensagem de erro:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
	Syntax error on token "{", yield expected after this token

O erro acontece no método actionPerformed(ActionEvent event), logo na linha da chave aberta do primeiro if aparece a mensagem: Syntax error on token “{”, yield expected after this token.

Agradeço a quem poder me retornar um feedback!

package exercicios;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class ColorSelect extends JFrame {

  private final String[] names = {"RED", "BLUE", "YELLOW", "GREEN", "BLACK", "WHITE", "ORANGE"};
  private final Color[] cores = { Color.RED, Color.BLUE, Color.YELLOW, Color.GREEN, Color.BLACK, Color.WHITE, Color.ORANGE };
  private final JComboBox<String> comboBox;
  private final JRadioButton background, foreground;
  private final ButtonGroup grupo;
  private final JButton ok, cancel;
  private final JPanel painel, painel2;
  private final Handler handler;
  
  ColorSelect() {
    super("Seleção de cor");

    this.handler = new Handler();
    this.comboBox = new JComboBox<>(names);
    this.background = new JRadioButton("Background");
    this.foreground = new JRadioButton("Foreground");
    this.grupo = new ButtonGroup();
    this.ok = new JButton("Ok");
    this.cancel = new JButton("Cancel");
    this.painel = new JPanel(new FlowLayout());
    this.painel2 = new JPanel(new FlowLayout());

    this.comboBox.addItemListener(handler);
    this.background.addItemListener(handler);
    this.foreground.addItemListener(handler);
    this.ok.addActionListener(handler);
    this.cancel.addActionListener(handler);

    this.comboBox.setMaximumRowCount(3);
    this.grupo.add(background);
    this.grupo.add(foreground);
    this.painel.add(background);
    this.painel.add(foreground);
    this.painel2.add(ok);
    this.painel2.add(cancel);

    this.add(comboBox, BorderLayout.NORTH);
    this.add(painel, BorderLayout.CENTER);
    this.add(painel2, BorderLayout.SOUTH);

    initGUI();
  }
	
	public void initGUI() {
    this.setDefaultCloseOperation(ColorSelect.EXIT_ON_CLOSE);
    this.setSize(300, 130);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
  }
  
  private class Handler implements ItemListener, ActionListener {
    private Color cor;
    private boolean backgroundMarcado;
    private boolean foregroundMarcado;
    
    @Override
    public void itemStateChanged(ItemEvent event) {
      if (event.getStateChange() == ItemEvent.SELECTED) {
        cor = cores[comboBox.getSelectedIndex()];
      } else if (background.isSelected()) {
        backgroundMarcado = true;
        foregroundMarcado = false;
      } else if (foreground.isSelected()) {
        foregroundMarcado = true;
        backgroundMarcado = false;
      }
    }
    
    @Override
    public void actionPerformed(ActionEvent event) {
      if (event.getActionCommand().equals("Ok")) {
        backgroundMarcado ? alterarCorDoFundo() : alterarCorDosComponentes();
      } else if (event.getSource().equals(cancel)) {
        cor = new Color(238,238,238);
      }
    }
    
    private void alterarCorDoFundo() {
      painel.setBackground(cor);
      painel2.setBackground(cor);
    }
    
    private void alterarCorDosComponentes() {
      background.setBackground(cor);
      foreground.setBackground(cor);
      ok.setBackground(cor);
      cancel.setBackground(cor);
    }
  }
  
  public static void main(String[] args) {
    new ColorSelect();
  }
}

Não está faltando um public antes do construtor?


// linhas anteriores
 private final Handler handler;

public ColorSelect() // nessa linha
{
  super("Seleção de cor");

// resto do código

Abraço.

Acho que para vc usar um IF ternário, vc deve atribuir o resultado em uma variável. Tente trocar por um IF tradicional msm:

if (backgroundMarcado) {
  alterarCorDoFundo();
} else {
  alterarCorDosComponentes();
}
1 curtida

Pode ser que ele queira um construtor default (que não é private, protected ou public).

Exatamente, o operador ternário só funciona em atribuições ou retornos.

1 curtida