2012-05-13 5 views
2

私は、プレーヤーがドラッグアンドドロップすることができるシンプルなJava Swing GUIチェスボードを作っています。問題は、フレームの境界線のために(上のタイトル、最大化/最小化/閉じるボタンなど)、座標が歪んでいることです。 - (0、0)はフレームの左上隅ですフレーム、つまりXボタンの少し上ですが、GUIはタイトルバーのすぐ下にビルドを開始するので、GUIは座標と揃っておらず、物事は最終的には動作しません。さらに、フレームのサイズを100 x 100などに設定すると、フレームの境界線が補正されないため、GUIの右下部分と一部が切り取られます。私はアプレットとして実行するとき、私はこの問題はありませんが、私はそれをしたくありません。私のフレームウィンドウの周りにその境界を取り除くことができるので、私は単純なGUIを持つことができますか、座標を正しく設定することができますか?Java GUI:座標を正しく整列させる

sscce:

import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 

public class class1 extends JFrame{ 
    public class1(){ 
     addMouseListener(new MouseAdapter(){ 
      public void mousePressed(MouseEvent evt){ 
       System.out.print(evt.getPoint()); 
      } 
     }); 
    } 

    public static void main(String[] args){ 
     class1 c = new class1(); 
     c.setTitle("Test"); 
     c.setSize(320, 320); 
     c.setLocationRelativeTo(null); 
     c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     c.setVisible(true); 
    } 
} 

答えて

1

それは、コードなしであなたのコードに問題があるかを知るのは難しいですが、私はあなたが様々なレイアウトマネージャを使って、簡単な道を行く、と聞かせた場合、これらの管理者が行うことを知っていますあなたのためにコンポーネントをレイアウトし、JFrameにpack()と呼ぶことを含めて、サイジングすることもできます。もう一度、何もサイズを設定せず、コンポーネントの優先サイズとレイアウトマネージャを使用してください。

このアドバイスが役に立たない場合は、問題となること以外は何もしない小さなコンパイル可能な実行可能プログラムsscceを追加してください。

編集:私はこれがSwing GUIであると仮定しています。これが正しいかどうか確認してください。

編集2:メニューバー、サイズ変更/最大化/閉じるアイコンを含む「装飾」を考慮しないJFrameのサイズを設定しているという問題が1つあります。繰り返しますが、サイズを直接設定するのではなく、グリッドを保持するJPanelのgetPreferredSize()メソッドをよりよくオーバーライドする必要がある場合は、サイズを直接設定する必要があります。

編集3:例えば:

import java.awt.*; 
import javax.swing.*; 

public class Grid extends JPanel { 
    public static final Color DARK_COLOR = Color.red.darker().darker().darker(); 
    public static final Color LIGHT_COLOR = Color.lightGray.brighter(); 
    public static final int SQUARE_SIDE = 60; 
    private static final int ROW_COUNT = 8; 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(ROW_COUNT * SQUARE_SIDE, ROW_COUNT * SQUARE_SIDE); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     for (int i = 0; i < ROW_COUNT; i++) { 
     for (int j = 0; j < ROW_COUNT; j++) { 
      Color c = (i % 2 == j % 2) ? LIGHT_COLOR : DARK_COLOR; 
      g.setColor(c); 
      int x = i * SQUARE_SIDE; 
      int y = j * SQUARE_SIDE; 
      g.fillRect(x, y, SQUARE_SIDE, SQUARE_SIDE); 
     } 
     } 
    } 

    public Grid() { 
     // TODO Auto-generated constructor stub 
    } 

    private static void createAndShowGui() { 
     Grid mainPanel = new Grid(); 

     JFrame frame = new JFrame("Grid"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 

} 
+0

@Andrew:あなたは、そこにロードされたファイルの伝票負荷を持っている、おそらくあまり合理的にあなたのためにレビューするボランティアを要求します。あなたの問題を1つの小さなプログラムに凝縮できますか?それを実行して問題を見ることができるだけの完全なものですが、このサイトに直接投稿できるように十分小さいものです。[sscce](http://sscce.org )(リンクを読んでください)? –

+0

質問にsscceを追加しました。実行すると、GUIの左上隅をクリックすると、(0、0)でない(マシンに依存する)座標が与えられます。例えば、私にとっては(3、24)です。 –

+0

@AndrewLatham:編集2を参照してください。 –

関連する問題