2016-05-26 11 views
1

別のプログラムの目的のために、私はインクリメンタルなペイントとレイアウトで構築されたイメージを持つ画面上にいくつかの線を描く必要があります。ラインは非常にまっすぐで、ほんのわずかしかなかったので、私はJPanelのペインティングスペースを使ってこれを行うと考えました。これは動作していないので、私はそれを動作させるためにテストプログラムを作ったが、私はまだこれが動作していない理由を把握することはできないようだ。 -Java - Swing Layout + AWT - レイアウトが配置されたJPanelに線を描画する方法は?

のJava 8

メモ帳

コマンドプロンプト

import javax.swing.JPanel; 
import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JFrame; 

import java.awt.GridLayout; 
import java.awt.Toolkit; 
import java.awt.Dimension; 


class TestMain{ 
public static void main(String[]args){ 
    TestingComponent tester = new TestingComponent(); 
} 
} 
class Block extends JPanel{ 
Block(){ 
     setOpaque(true); 
} 
public void paintComponent(Graphics gr){ 
    super.paintComponent(gr); 
    if(getBackground() == Color.white){ 
     System.out.println("Reached"); 
     gr.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight()); 
    } 
} 
} 
class TestingComponent{ 
TestingComponent(){ 
    JFrame frmMain = new JFrame("testing"); 
    frmMain.setSize(Toolkit.getDefaultToolkit().getScreenSize()); 
    JPanel pnlMain = new JPanel(); 
    Block block = new Block(); 
    Dimension dmsDim = new Dimension(16, 16); 
    pnlMain.setPreferredSize(dmsDim); 
    frmMain.add(pnlMain); 
    pnlMain.setLayout(new GridLayout(2, 2)); 
    for(int index = 0; index < 4; index++){ 
     block = new Block(); 
     switch(index){ 
      case 0: 
       block.setBackground(Color.black); 
       break; 
      case 1: 
       block.setBackground(Color.blue); 
       break; 
      case 2: 
       block.setBackground(Color.green); 
       break; 
      case 3: 
       block.setBackground(Color.white); 
       break; 
     } 
     pnlMain.add(block); 
    } 
    frmMain.setVisible(true); 
} 
} 

バージョン/私は(テストプログラムで)使用しているプログラム:ここ

は私のテストプログラムであります

drawLineメソッドがどれほどシンプルかを見ると、私はほとんどそれを確信していますレイアウトに起因するものですが、その1点以外は、なぜ線が描画されていないのかわかりません。 System.out.println( "Reached");出力されているので、プログラムは確実にgr.drawLine()に到達します。

質問を明確に述べるには...なぜ線が引かれていないのですか?これをどうやって解決するのですか?

答えて

1

あなたは

getX()あなたの線を引くとgetY()親コンポーネントのコンポーネント(Block)の位置を返すために、間違ったポイントを使用しています。

図面を2つに分割するため、getX()はパネルの右端の座標を返します。getY()は非常に上の座標を返します。

gr.drawLine(0, 0, getWidth(), getHeight());を使用して線を描く

関連する問題