2016-05-26 109 views
1

爲了另一個程序的目的,我需要在屏幕上繪製幾行,其中有一個用增量繪畫和佈局構建的圖像。由於線條非常直線且只有幾條,因此我認爲使用JPanel的繪畫空間來做到這一點。由於這不起作用,我做了一個測試程序,試圖使其工作,但我似乎無法弄清楚爲什麼這不起作用。Java - Swing佈局+ AWT - 如何在帶有佈局的JPanel中繪製一條線?

這裏是我的測試程序:

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); 
} 
} 

版本/程序我使用(在測試計劃) -

的Java 8

記事本

命令提示符

看到drawLine方法有多簡單,我幾乎可以肯定它是由於佈局,但除了這一點,我不知道該線沒有繪製的原因。 System.out.println(「Reached」);正在推出,所以程序肯定會達到gr.drawLine()。

要清楚地說明問題......爲什麼不畫線?我該如何解決?

回答

1

您使用了錯誤的點來繪製你的線

getX()getY()父組件上返回您的組件(Block)的位置。

由於您將圖紙分成兩部分,getX()返回面板的非常正確的座標,getY()返回最上面的座標。

使用gr.drawLine(0, 0, getWidth(), getHeight());來畫線