作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经研究了一天了,我不明白为什么不调用 paintComponent(Graphics g)
方法。我使用第二个构造函数来实例化对象,但仍然没有任何结果。我的室友有一个非常相似的代码并且有效。我做错了什么?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class squareImage extends JPanel{
Image picture;
String name;
baharKa outerPanel; // a panel that I add these sqaures in
String topLabel;
int a = 0;
int b = 0;
public squareImage(baharKa out, String top, String name, Image im){ //This is the first constructor
this.outerPanel = out;
this.name = name;
this.picture = im;
this.topLabel = top;
this.setPreferredSize(new Dimension(80, 60));
this.setBounds(a, b, getWidth(), getHeight());
this.setPreferredSize(new Dimension(80,80));
this.setOpaque(false);
}
public squareImage(baharKa out, String top, String name, Image im, int a, int b){ //This is second contructor
this(out, top, name, im);
this.a = a;
this.b = b;
this.setBounds(a, b, getWidth(), getHeight());
out.revalidate();
}
protected void paintComponent(Graphics g) { //This is never called
super.paintComponent(g);
System.out.println ("hi!");
int i = g.getFontMetrics().stringWidth(name);
int j = g.getFontMetrics().stringWidth(topLabel);
g.drawImage(picture, 20, 20, 40, 40, null);
g.setColor(Color.BLACK);
g.setFont(new Font("Calibri", Font.PLAIN, 12));
g.drawString(name, i/2 + 40, 45);
g.drawString(name, j/2 + 40, 15);
}
}
/////////我在这里使用它///////
protected void showMeTheSquares(){
try {
System.out.println("showme");
wood = new squareImage(baharKaPanel, "0", "Wood", ImageIO.read(new File("images/wood.png")), 200, 75);
metal = new squareImage(baharKaPanel, "0", "Metal", ImageIO.read(new File("images/metal.png")), 300, 75);
plastic = new squareImage(baharKaPanel, "0", "Plastic", ImageIO.read(new File("images/plastic.png")), 400, 75);
screwD = new squareImage(baharKaPanel, "0", "Plastic", ImageIO.read(new File("images/screwdriver.png")), 10, 100);
hammer = new squareImage(baharKaPanel, "0", "Hammer", ImageIO.read(new File("images/hammer.png")), 10, 180);
pliers = new squareImage(baharKaPanel,"0", "Pliers", ImageIO.read(new File("images/pliers.png")), 10, 340);
scissors = new squareImage(baharKaPanel,"0", "Scissors", ImageIO.read(new File("images/scissors.png")), 10, 420);
brush = new squareImage(baharKaPanel, "0", "Paint Brush", ImageIO.read(new File("images/paintbrush.png")), 10, 260);
wood.repaint();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addEverything();
}
protected void addEverything(){
baharKaPanel.add(wood);
baharKaPanel.add(metal);
baharKaPanel.add(plastic);
baharKaPanel.add(screwD);
baharKaPanel.add(hammer);
baharKaPanel.add(pliers);
baharKaPanel.add(scissors);
baharKaPanel.add(brush);
}
最佳答案
这和您对空布局的使用将创建一个 0 x 0 大小的组件:
this.setBounds(a, b, getWidth(), getHeight());
如果您此时输入代码并打印出 getWidth()
和 getHeight()
在未渲染的组件中返回的内容,您将发现是 0 或 1。
无论如何,您都不应该使用空布局或设置边界,而应该使用尊重首选尺寸的布局管理器,因为使用空布局会导致 GUI 非常不灵活,虽然它们在一个平台上看起来不错,但在一个平台上看起来很糟糕大多数其他平台或屏幕分辨率,并且很难更新和维护。
关于java - PaintComponent 从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952832/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!