1

我正在开发一个应用程序来创建和编辑填字游戏,如果有帮助,我会在最后发布代码。我目前正在尝试解决这部分代码中出现的问题。

public void componentResized(ComponentEvent e) {
    // TODO Auto-generated method stub
    for(int i=0; i<width; i++) {
        for(int j=0; j<height; j++) {
            if(e.getSource()==crosswordSquare[i][j]){
                blackSquare = new ImageIcon(blackSquare.getImage().getScaledInstance(
                        crosswordSquare[i][j].getWidth(), crosswordSquare[i][j].getHeight(), 1));
                crosswordSquare[i][j].setIcon(blackSquare);
            }

        }
    }

}

基本上,我正在尝试将 JButtons 的 ImageIcons 调整为 JButtons 的尺寸,然后再调整它们的大小以补偿由于我正在使用的 GridLayout 而导致的大小变化。然而,这段代码的结果并不完全符合我的期望,原因有两个。

  1. 调整所有 225 个方格的大小需要很长时间,我猜这不是典型的填字游戏大小。我确实想稍后制作一个尺寸编辑功能,所以我可能希望能够处理更多的正方形。
  2. 它有时会起作用,但有时放大后正方形会变得很窄,我不确定为什么会这样。

本质上,我需要找到一种更快的方法。关于如何修改/改进它的任何想法?通过绘画方法进行更新会有什么不同吗?

    public class CrosswordInterface extends JFrame 
            implements ComponentListener, ActionListener{

    //private ArrayList<ArrayList<JButton>> squares= new ArrayList<ArrayList<JButton>>();

    private JButton[][] crosswordSquare = new JButton[15][15];

    private ImageIcon blackSquare = new ImageIcon(
        CrosswordInterface.class.getResource("BlackSquare.png"));

    private JPanel panel = new JPanel();

    //stores default width and height of square array
    //initial value of 15 (225 squares)
    private int width = 15;
    private int height = 15;

    public CrosswordInterface() {
    CreateCrosswordGrid(); 
        setSize(width *blackSquare.getIconWidth(), height*blackSquare.getIconHeight());
    setVisible(true);
    setResizable(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public int getWidth() {
    return width;
    }



    public int getHeight() {
    return height;
    }

    private void CreateCrosswordGrid() {


    panel.setLayout(new GridLayout(width, height));
    for(int i=0; i<width; i++) {

        for(int j=0; j<height; j++) {
            JButton b = new JButton();
            b.setIcon(blackSquare);
            //b.setText(text);
            //b.setIconTextGap()
            //b.setIco;

            b.setSize(blackSquare.getIconWidth(), blackSquare.getIconHeight());
            crosswordSquare[i][j]=b;
            crosswordSquare[i][j].addComponentListener(this);
            panel.add(crosswordSquare[i][j]);
        }
    }
    panel.setSize(width * blackSquare.getIconWidth(), height * blackSquare.getIconHeight());
    setSize(height * blackSquare.getIconWidth(), width * blackSquare.getIconHeight());
    //panel.set
    add(panel);
}

public void actionPerformed(ActionEvent e) {


    for(int i=0; i<width; i++) {
        for(int j=0; j<height; j++) {
            if(e.getSource()==crosswordSquare[i][j]){

            }

        }
    }

}

    public void componentHidden(ComponentEvent e) {
    // TODO Auto-generated method stub

    }

public void componentMoved(ComponentEvent e) {
    // TODO Auto-generated method stub

}

public void componentResized(ComponentEvent e) {
    // TODO Auto-generated method stub
    for(int i=0; i<width; i++) {
        for(int j=0; j<height; j++) {
            if(e.getSource()==crosswordSquare[i][j]){
                blackSquare = new ImageIcon(blackSquare.getImage().getScaledInstance(
                        crosswordSquare[i][j].getWidth(), crosswordSquare[i][j].getHeight(), 1));
                crosswordSquare[i][j].setIcon(blackSquare);
            }

        }
    }

}

public void componentShown(ComponentEvent e) {
    // TODO Auto-generated method stub

}


}
4

1 回答 1

1

呼应 bdares 在上面的评论中所说的话。我会使用一组有限的图标(2 个?),当网格调整大小时,这些图标可以放置在正确的位置。没有理由需要为每个正方形调整外观相似的图像(假设它们相似!)。

于 2011-10-25T03:10:05.700 回答