Простая Java GUI проблема, которую я не могу понять - PullRequest
1 голос
/ 12 февраля 2011

Извините, я спрашивал об этом раньше, но я переделал и упростил свой код до такой степени, что я думал, что он заслуживает отдельного поста.

Что мой код делает в настоящее время: Создает 3 экземпляракласс кнопки, помещает их в JPanel.Каждый раз, когда нажимается кнопка, количество нажатий увеличивается и устанавливается в качестве текста кнопки.Цвет кнопки остается прежним (за исключением первого щелчка).

Что я хочу, чтобы мой код делал: после первого щелчка нажатая кнопка меняется на оранжевый, а кнопки справа отпосле оранжевого цвета он изменяется на следующий цвет в массиве, если нажатая кнопка находится в конце массива, начните снова с начала.Делайте все это в одном классе

Каждый последующий щелчок должен перемещать цвета на одну позицию вправо, циклически проходя по массиву.

Что я думаю, что мне нужно сделать (после того, как я поставил waaayчтобы много думать об этом!): есть отдельный метод для первого щелчка, где указатель указывает, какая кнопка [] была нажата (т.е. источник).Обновите все кнопки отсюда, используя цикл, находя модуль количества кнопок и циклически изменяя, пока все кнопки не будут обновлены.

После запуска этого метода, никогда не запускайте его снова и циклически просматривайте массив цветов послекаждый щелчок.

Проблема в том, что я понятия не имею, как бы это реализовать, несмотря на буквальные дни попыток.Может ли кто-нибудь помочь мне с этим?Я приму любую обратную связь или помощь, которую смогу получить, независимо от того, насколько она мала, потому что это сводит меня с ума!:)

Большое спасибо всем, следующий код:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ButtonJava3 extends JButton
  implements ActionListener{

  public static int noOfButtons=3;
  private static final Color[] COLORS = { Color.ORANGE,
    Color.WHITE,
    Color.GREEN};
  private int clicks;
  private static ButtonJava3[] buttons;

  public static void main ( String[] args ) {
    JFrame frame = new JFrame ( "ButtonJava (the Hutt)" );
    JPanel panel = new JPanel( );
    buttons = new ButtonJava3[3];
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    for(int i = 0;i<buttons.length ; i++){
      buttons[i] = new ButtonJava3(); 
      panel.add(buttons[i]);
    }
    frame.getContentPane( ).add( panel );
    frame.setSize( 300, 300 );
    frame.setVisible( true );
  }

  private ButtonJava3(){

    setBackground( Color.YELLOW );
    setText( "Pick Me" );
    this.addActionListener( this );
  }

  private void updateButtons( ) {
    clicks++;
    int i = 0;
    do {
      buttons[i].setBackground( COLORS[i] );
      i++;
    } while(i<noOfButtons);
    setText( Integer.toString(clicks) );

  }
  @Override
  public void actionPerformed( ActionEvent event ){
    updateButtons( ); 
  }



}

Еще раз спасибо, и приношу извинения за столько вопросов!

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Я считаю, что это даст вам то, что вы ищете, с небольшим количеством изменений в вашей первоначальной логике:

public class ButtonJava3 extends JButton
        implements ActionListener {

    public static int noOfButtons = 3;
    private static final Color[] COLORS = {Color.ORANGE,
            Color.WHITE,
            Color.GREEN};
    private int clicks;
    private static ButtonJava3[] buttons;
    private static ButtonJava3 first;
    private int myIndex;
    private int colorIndex = -1;
    public static void main(String[] args) {
        JFrame frame = new JFrame("ButtonJava (the Hutt)");
        JPanel panel = new JPanel();
        buttons = new ButtonJava3[3];
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = new ButtonJava3(i);
            panel.add(buttons[i]);
        }
        frame.getContentPane().add(panel);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }

    private ButtonJava3(int myIndex) {
        this.myIndex = myIndex;
        setBackground(Color.YELLOW);
        setText("Pick Me");
        this.addActionListener(this);
    }

    private void incrementColors() {
        colorIndex++;
        for (int i = 0; i < noOfButtons; i++) {
            int j = myIndex + i;
            System.out.println((j%noOfButtons) +":"+((colorIndex + i) % noOfButtons));
            buttons[j % noOfButtons].setBackground(COLORS[(colorIndex + i) % noOfButtons]);
            buttons[j % noOfButtons].setOpaque(true);
        }
    }

    private void updateButtons() {
        if (first == null) {
            first = this;
        }
        first.incrementColors();
        setText(Integer.toString(++clicks));

    }

    public void actionPerformed(ActionEvent event) {
        updateButtons();
    }


}
2 голосов
/ 12 февраля 2011
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonJava3 extends JButton
  implements ActionListener{

  public static final int noOfButtons = 3;
  private static final Color[] COLORS = { Color.ORANGE,
    Color.WHITE,
    Color.GREEN};
  private int clicks;
  private static boolean firstButtonClicked = false;
  private int colorIndex, index;
  private static ButtonJava3[] buttons;

  public static void main ( String[] args ) {
    JFrame frame = new JFrame ( "ButtonJava (the Hutt)" );
    JPanel panel = new JPanel( );
    buttons = new ButtonJava3[noOfButtons];
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    for(int i = 0;i < noOfButtons ; i++){
        buttons[i] = new ButtonJava3(i); // One button of each color
        panel.add(buttons[i]);
    }
    frame.getContentPane( ).add( panel );
    frame.setSize( 300, 300 );
    frame.setVisible( true );
  }

  private ButtonJava3(int index){
    this.index = index;
    setBackground( Color.YELLOW );
    setText( "Pick Me" );
    this.addActionListener( this );
  }

  private void updateButtons( ) {
    clicks++;
    for(int i = 0; i< noOfButtons; i++){
        buttons[i].updateButton(); // update each button
    }
    setText( Integer.toString(clicks) );
  }
  private final void updateButton(){
    colorIndex--;; // Go to the next color
    if(colorIndex < 0){ // if there is no next color
        colorIndex = noOfButtons-1; // go back to first color
     }// apply result
    setBackground(COLORS[colorIndex]);
   }
  private final void colorOther(){
      for(int i = 0; i < noOfButtons; i++){
          if(i != index){
              buttons[i].colorIndex = checkColor(colorIndex+(i-index));
          }
      }
  }

  private final static int checkColor(int i){
      if(i >= noOfButtons){
          i -= (noOfButtons);
      }else if(i < 0){
          i = (noOfButtons)+i;
      }
      return i;
  }
  @Override
  public void actionPerformed( ActionEvent event ){
      if(!firstButtonClicked){
        colorIndex = 1;
        colorOther();firstButtonClicked = true;
      }
    updateButtons( );
  }
}
...