0

我正在创建一个加载按钮,并希望它填充嵌套在边框布局(主窗口)的 CENTER 面板内的 9x9 网格布局内容窗格。此方法位于边框布局的 PAGE_START 部分内。问题是如何从这里将按钮放置在 CENTER 部分的网格布局中?

       //Load Button
    JButton load = new JButton("Load");
    load.addActionListener(new ActionListener() { 
        @Override
        public void actionPerformed (ActionEvent a) {
            //Dialog Box To Locate The Puzzle
                SudokuPuzzle puzzle;
                JFileChooser chooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter(
                        "Text Files", "txt");
                chooser.setFileFilter(filter);
                int returnVal = chooser.showOpenDialog(SudukoGUI.this);
                if(returnVal == JFileChooser.APPROVE_OPTION) {
                    String fileLocation = chooser.getSelectedFile().getName();
                    Scanner file = new Scanner(fileLocation);
                    puzzle = new SudokuPuzzle(file, file);

                    //Load Puzzle To Model and draw it
                    try {
                        gridView = new JButton[9][9];
                        int[][] viewArray = puzzle.getArray();

                        for (int row = 0; row < 9; row++) {
                            for (int col = 0; col < 9; col++) {
                                gridView[row][col] = new JButton(String.valueOf(viewArray[row][col])); 

***************THE NEXT LINE REPRESENTS MY PROBLEM***************
                                this.getContentPane().board.add(gridView[row][col]);

                            }
                        }

这是在构造函数中

     JPanel board = new JPanel();
    board.setLayout (new GridLayout (9,9));
    board.setPreferredSize(new Dimension(400,400));
    this.getContentPane().add(board, BorderLayout.CENTER);
4

2 回答 2

0

首先声明boardfinal变量使用:

final JPanel board = new JPanel();

这样board就可以从ActionListener. 此后,更改此行:

this.getContentPane().board.add(gridView[row][col]);


board.add(gridView[row][col]);
于 2013-03-24T20:43:33.877 回答
0

这个

this.getContentPane().board.add(gridView[row][col]);

没有任何意义。您在构造函数中添加board到内容窗格,但这并不意味着它board现在是内容窗格的一个字段。所以

getContentPane().board

应该无法编译。

您可能应该board为您的类创建一个字段,而不是在构造函数中将其声明为局部变量。然后,您将能够在board整个班级中进行参考。

基本示例:

public class Example
{
    private JPanel board;

    public Example()
    {
         board = new JPanel();
         getContentPane().add(board);
         //assuming above code takes place in the constructor
         JButton load = new JButton("load");
         load.addActionListener(new ActionListener()
         {
              public void actionPerformed(ActionEvent e)
              {
                    ...lots of code
                    //as board is no longer a local variable this will compile
                    board.add(gridView[row][col]);
              }
         }
    }
}

请注意,您可能希望load在某个时候添加到您的框架中。

于 2013-03-24T21:08:17.577 回答