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);
            }

        }
    }

}

基本的に、使用しているGridLayoutによるサイズの変更を補正するために、サイズ変更後にJButtonのImageIconのサイズをJButtonのサイズに変更しようとしています。ただし、このコードの結果は、2つの理由で私の期待を完全には満たしていません。

  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 に答える