第一课:
public class Bar extends JComponent {
// instance variables - replace the example below with your own
private static boolean litUp = false;
private static boolean vertical = true;
private static int positionX;
private static int positionY;
private static int sizeX;
private static int sizeY;
private static Color color;
public void paintComponent(Graphics g) {
System.out.println("I am being called");
positionX = 50;
positionY = 30;
vertical = true;
if(vertical == true) {
sizeX = 10;
sizeY = 30;
if(litUp == true)
{
color = Color.red;
}
else
{
color = Color.black;
}
} else{
sizeX = 30;
sizeY = 10;
if(litUp == true)
{
color = Color.red;
}
else
{
color = Color.black;
}
}
g.fillRect(positionX, positionY, sizeX, sizeY);
g.setColor(color);
super.paintComponent(g);
}
}
第二课:
public class TestingBar {
public static void main(String[] args) {
final int FRAME_WIDTH = 317;
final int FRAME_HEIGHT = 415;
//created frame and panel. Panel layout is taken away from the flow layout.
final JFrame myFrame = new JFrame();
myFrame.setTitle("Tester Window (v2)");
myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
final JPanel myPanel = new JPanel();
myPanel.setLayout(null);
final Bar testBar = new Bar();
//myPanel.add(testBar);
myFrame.getContentPane().add(testBar);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
myPanel.add(testBar);
}
}
这只是给我一个空JFrame
。并且paintComponent
方法中从不使用print语句。我很难过。
也许他们因为如此可爱而幸免于难。我的意思是,只要看一下试图吃樱桃番茄的小乌龟的视频。这是可爱的缩影。
答案 0 :(得分:1)
我认为你应该调用super.paintComponent(g);在功能的开头。它可能会覆盖你的矩形。
答案 1 :(得分:1)
您正在向您的框架添加testBar
,然后再将myPanel
添加到您的框架中删除myPanel
(一个组件只能有一个父组件)。但由于myPanel
没有被添加到任何东西,它永远不会被调用。
注释掉这一行会解决这个问题,但您可能打算对//myPanel.add(testBar);
做一些有意义的事情,所以请检查您的设计。
{{1}}
答案 2 :(得分:1)
我将你的Bar类变成了JPanel并改为使用paint方法而且它工作正常,但其他注释是正确的,你没有将面板添加到框架,只是条形对象:
//created frame and panel. Panel layout is taken away from the flow layout.
final JFrame myFrame = new JFrame();
myFrame.setTitle("Tester Window (v2)");
myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
final Bar testBar = new Bar();
myFrame.getContentPane().add(testBar);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
并在栏中:
public class Bar extends JPanel
{
//....
public void paint(Graphics g)
{
g.setColor(Color.black);
g.fillRect(20,20,20,20);
}
}
答案 3 :(得分:1)
首先调用super.paintComponents。您可能也想将g转换为Graphics2D对象。
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
订单错误 - 设置颜色,然后绘制矩形(使用g2):
g2.setColor(color);
g2.fillRect(positionX, positionY, sizeX, sizeY);