2012-03-29 8 views
1

こんにちは私は自分のボタンを色づけしました。今は、任意の行または列の各色のボタンを1つだけ許可するコードを書いています。私はこれを試みましたが、自分のプライベートブール値を取得することはできません。下記の私はあなたがあなたのコンストラクタ内の1本のセットアップライン上後方jiを持っているので、それは、そのボタンのインスタンスを参照することだ瞬間の行をチェックするなぜ私はgetActionCommandを使用しようとするとnullポインタ例外が発生する

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 
import java.sql.*; 
public class Grid5 extends JFrame implements ActionListener 
{ 
     private ColourChooser paintBox = null; 
     public static final int ROW = 6; 
     public static final int COLUMN = 6; 
     private static Grid5 grid; 
     public static final String defaultName = "Black"; 
     public JButton[][] buttons; //makes an array called buttons 
     public static void main(String[] args)// sets up a 6x6 grid 
     { 
      int rows = 6; 
      int cols = 6; 
      int size = 600; 
      Grid5 grid = new Grid5(rows, cols); 
      grid.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      grid.setPreferredSize(new Dimension(size, size)); 
      grid.pack(); 
      grid.setLocationRelativeTo(null); 
      grid.setVisible(true); 
     } 
     // main 
     public Grid5(int rows, int cols) // makes the 6x6 main grid a grid of JButtons 
     { 
      int rowSize = 6; 
      int colSize = 6; 
      int gridSize = 600; 
      buttons = new JButton[rowSize][colSize]; 
      Container pane = getContentPane(); 
      pane.setLayout(new GridLayout(rows, cols)); 
      for(int j =0; j < rows; j++){ 
       for (int i = 0; i < cols; i++) { 
        buttons[j][i] = new JButton(""); 
        buttons[j][i].setOpaque(true); 
        buttons[j][i].setBackground(Color.BLACK); 
        buttons[j][i].setActionCommand(j + " " + i); 
        buttons[j][i].setName("Black"); 
        buttons[j][i].addActionListener(this); 
        pane.add(buttons[j][i]); 
       } 
      } 
     }    //end of grid constructor 

     public void actionPerformed(ActionEvent e) 
     { 
      JButton button = (JButton) e.getSource(); 
      if (paintBox != null && paintBox.isShowing())//stops more than one paintBox from opening 
       paintBox.dispose(); 
      if(e.getSource() instanceof JButton){ 
       ((JButton)e.getSource()).setBackground(Color.BLACK); 
      } 

      int rows = 6; 
      int cols = 1; 
      int size = 300; 
      paintBox = new ColourChooser(grid, false, button); 
      paintBox.setPreferredSize(new Dimension(size/3, size)); 
      paintBox.pack(); 
      paintBox.setVisible(true); 
     } 

     public class ColourChooser extends JDialog 
     { 
      private JButton fillRed = new JButton("Red"); 
      private JButton fillYellow = new JButton("Yellow"); 
      private JButton fillBlue = new JButton("Blue"); 
      private JButton fillGreen = new JButton("Green"); 
      private JButton fillPurple = new JButton("Purple"); 
      private JButton fillBrown = new JButton("Brown"); 
      private JButton[] paintButton = {fillRed,fillYellow,fillBlue,fillGreen,fillPurple,fillBrown}; 
      private Color[] colours = {Color.RED, Color.YELLOW, Color.BLUE, Color.GREEN, new Color(102, 0, 102), new Color(102, 51, 0)}; 
      private JButton buttonPress; 

      private int buttonsLeftRow ; 
     private int buttonsLeftColumn ; 
     private int row,column; 

      public ColourChooser(final Grid5 frame, boolean isModal, JButton button) 
      { 

       buttonPress = button; 
       JPanel panel = new JPanel(); 
       panel.setLayout(new GridLayout(6, 1)); 
       for (int i = 0; i < paintButton.length; i++) { 
        paintButton[i].setOpaque(true); 
        paintButton[i].addActionListener(buttonAction); 
        paintButton[i].setForeground(new Color(100,100,100)); 
        paintButton[i].setBackground(colours[i]); 
        panel.add(paintButton[i]); 
       } 
       add(panel); 
       pack(); 
      } 
      private ActionListener buttonAction = new ActionListener() 
     { 
      public void actionPerformed(ActionEvent a) 
      { 
       JButton fill = (JButton) a.getSource(); 
       String colour = "Red"; 
       if(fill == fillRed){ 

        if(checkColoursRow(colour,row)){ 
         buttonPress.setBackground(Color.RED); 
         buttonPress.setName("Red"); 
         dispose(); 
        } 
       } 
       colour = "Yellow"; 
       if(fill == fillYellow){ 

        if(checkColoursRow(colour,row)){ 
        buttonPress.setBackground(Color.YELLOW); 
        buttonPress.setName("Yellow"); 
        dispose(); 
        } 
       } 
       colour = "Blue"; 
       if(fill == fillBlue){ 

        if(checkColoursRow(colour,row)){ 
        buttonPress.setBackground(Color.BLUE); 
        buttonPress.setName("Blue"); 
        dispose(); 
        } 
       } 
       colour = "Green"; 
       if(fill == fillGreen){ 

        if(checkColoursRow(colour,row)){ 
        buttonPress.setBackground(Color.GREEN); 
        buttonPress.setName("Green"); 
        dispose(); 
        } 
       } 
       colour = "Purple"; 
       if(fill == fillPurple){ 

        if(checkColoursRow(colour,row)){ 
        buttonPress.setBackground(new Color(102, 0, 102)); 
        buttonPress.setName("Purple"); 
        dispose(); 
        } 
       } 
       colour = "Brown"; 
       if(fill == fillBrown){ 

        if(checkColoursRow(colour,row)){ 
        buttonPress.setBackground(new Color(102, 51, 0)); 
        buttonPress.setName("Brown"); 
        dispose(); 
        } 
       } 
      } 
     }; 

     private boolean checkColoursRow(String colour, int row){ 
      buttonsLeftRow = 0; 
      buttonsLeftColumn = 0; 
      String command = buttonPress.getActionCommand(); 
      String[] arrayInfo = command.split(" "); 
      row = Integer.parseInt(arrayInfo[0]); 
      column = Integer.parseInt(arrayInfo[1]); 
      for(String c : grid.getRow(row)){ 
       if(c.equals(null)){ 
       continue; 
       if(buttonPress.getName().equals(c)){ 
        return true; 
       } 
       } 
       return false; 

      } 
      } 
     } 
} 

おかげ

+2

次回例外が発生した場合は、スタックトレースを質問に追加してください。 – Robin

答えて

3

をしようとしているコードがありますまだ作成されていません:

buttons[i][j].setActionCommand(j + " " + i); 
     ^^ 

私はそれらを交換してテストしたところ、プログラムは正常に動作します。

+0

ありがとうございました。私は正直なところ、私は気づいただろうが、私はまだ行や列に任意のアイデアを同じ色の2を持つことができるthikしないでください。 – user1296913

+0

私は痛みではありません – user1296913

関連する問題