提案:
paint
JApplet、JFrame、JDialog などの最上位コンポーネントのメソッドで直接描画しないでください。
- カスタム描画を行う必要がある場合は、代わりに
paintComponent(...)
、JPanel や JComponent 自体など、JComponent を拡張するコンポーネントのメソッド オーバーライドでこれを行います。
- あなたの問題は、少なくともまだカスタムペイントを必要とせず、他の手段ではるかに優れており、より簡単に解決できます。
- JLabels、JTextFields などのコンポーネントを使用し、Swing レイアウト マネージャーを使用してそれらを配置します (上記の他の手段)。これを使用する方法に関するチュートリアルをここで見つけることができます:コンテナ内のコンポーネントのレイアウト
- 最初に注目すべきレイアウトには、数独の「セル」の GridLayout と GUI 全体の BorderLayout が含まれます。少なくとも最初は、GridBagLayout と GroupLayout を使用しないでください。
- それぞれが単純なレイアウト マネージャーを使用する JPanel をネストすることで、複雑なアプリケーションを作成できることに注意してください。
- グリッド線を「ペイント」する簡単な方法は、GridLayout を使用し、JTextFields を保持する JPanel の背景色を Color.BLACK に設定することです。また、GridBagLayout に垂直方向と水平方向に小さなギャップを与えて、黒が透けて見えるようにしてください。上記のチュートリアルは、これを行う方法を示しています。
- これが私のアプリケーションなら、アプリケーションを保持する JPanel を作成するように GUI を調整します。次に、JApplet で表示する必要がある場合は、JApplet をサブクラス化する非常に小さなアプリケーションを作成し、
init()
メソッドで数独 JPanel を JApplet の contentPane に追加します。このように、代わりに JFrame でアプリを表示したい場合は、JFrame を作成する別の小さなクラスを作成し、数独 JPanel を JFrame の contentPane に追加してから、JFrame を呼び出すだけpack()
で済みます。それからsetVisible(true)
。
JPanel を JApplet に追加する方法に関する質問については、チュートリアルでこれを行う方法が示されます。チュートリアルの大きなインデックスにリンクしていない場合は、そうする必要があります: The Really Big Index .
非常に単純な例は次のようになります。
import java.lang.reflect.InvocationTargetException;
import javax.swing.*;
public class MyApplet extends JApplet {
@Override
public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
getContentPane().add(new MyJPanel());
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}