항상 많은 옵션이 있습니다. 그리고 솔루션을 요청하는 것은 거의 불가능합니다. 한 가지 방법은 "최상의"해결책이 없기 때문입니다. 반면에, 솔루션이 "좋은"방법 (또는 그것이 "최상의"방법인지)을 알아 내기 위해서는 요구 사항 및 평가 메트릭의 사양에 관해 엄청나게 정확해야합니다.
그러나 가장 간단한 형식 중 하나에서 char [] [] 배열을 표시하고 (현재 표시된 내용을 char [] [] 배열로 가져올 수있는) GUI 구성 요소가 필요합니다. 이 같은 구현 ...
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class CrosswordGUI
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
JPanel container = new JPanel(new FlowLayout());
final CrosswordPanel panel = new CrosswordPanel();
container.add(panel);
f.getContentPane().add(container, BorderLayout.CENTER);
JButton generateButton = new JButton("Generate");
generateButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
generate(panel);
}
});
f.getContentPane().add(generateButton, BorderLayout.SOUTH);
f.setSize(800, 800);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static Random random = new Random(0);
private static void generate(CrosswordPanel panel)
{
int w = 4 + random.nextInt(8);
int h = 4 + random.nextInt(8);
char crossword[][] = new char[w][h];
for (int y=0; y<h; y++)
{
for (int x=0; x<w; x++)
{
if (random.nextFloat() > 0.2)
{
char c = (char)('A' + random.nextInt(26));
crossword[x][y] = c;
}
}
}
panel.setCrossword(crossword);
}
}
class CrosswordPanel extends JPanel
{
private JTextField textFields[][];
void setCrossword(char array[][])
{
removeAll();
int w = array.length;
int h = array[0].length;
setLayout(new GridLayout(w, h));
textFields = new JTextField[w][h];
for (int y=0; y<h; y++)
{
for (int x=0; x<w; x++)
{
char c = array[x][y];
if (c != 0)
{
textFields[x][y] = new JTextField(String.valueOf(c));
textFields[x][y].setFont(textFields[x][y].getFont().deriveFont(20.0f));
add(textFields[x][y]);
}
else
{
add(new JLabel());
}
}
}
getParent().validate();
repaint();
}
char[][] getCrossword()
{
int w = textFields.length;
int h = textFields[0].length;
char crossword[][] = new char[w][h];
for (int y=0; y<h; y++)
{
for (int x=0; x<w; x++)
{
if (textFields[x][y] != null)
{
String s = textFields[x][y].getText();
if (s.length() > 0)
{
crossword[x][y] = s.charAt(0);
}
}
}
}
return crossword;
}
}
그래서 너 정말 그렇게 많이 !!! 이것은 정말로 도움이되었습니다. 내 기존 GUI에 추가하는 방법을 알아 냈어. 너 덕분에 내 프로그램을 다 끝낼 수 있었어! – user3306101