Я работаю над приложением для создания и редактирования кроссвордов, код которого я выложил в конце, если это поможет. В настоящее время я пытаюсь решить проблему, которая возникла в этой части кода.
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);
}
}
}
}
В основном я пытаюсь изменить размеры ImageIcons для JButtons до размеров JButton после их изменения, чтобы компенсировать изменение их размера из-за используемого GridLayout. Однако результат этого кода не совсем соответствует моим ожиданиям по двум причинам.
- Требуется много времени, чтобы изменить размер всех 225 квадратов, что, я думаю, не является типичным размером кроссворда. Я хочу сделать функцию редактирования размера позже, поэтому я, вероятно, хочу иметь возможность обрабатывать больше квадратов.
- Иногда это работает, но в других случаях при увеличении квадраты становятся очень узкими, и я не уверен, почему это происходит.
По сути, мне нужно найти более быстрый подход. Любые идеи о том, как изменить / улучшить его? Будет ли иметь какое-либо значение обновление через метод рисования?
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
}
}