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()。
要清楚地說明問題......爲什麼不畫線?我該如何解決?