【问题标题】:paintComponent removing text value of buttonpaintComponent 删除按钮的文本值
【发布时间】:2017-11-26 11:22:07
【问题描述】:

我正在为JButton 或说JTableHeader 设置背景图像。当我在同一处执行paintComponent 时,它正在删除为该组件设置的文本值。

知道我哪里出错了吗?

JButton btn = new JButton(){
    @Override
    public void paintComponent(Graphics g){
        Dimension size = this.getSize();
        g.drawImage(Toolkit.getDefaultToolkit().getImage("C:\\User\\Downloads\\MainMenu.jpg"), 0, 0, size.width, size.height, this);
    }
};
btn.setText("TEST WITH ME");
btn.setOpaque(true);

【问题讨论】:

  • 1) 在任何重写的绘制方法中,始终首先调用super 方法。这会绘制背景、边框等。 2) g.drawImage(Toolkit.getDefaultToolkit().getImage("C:\\User\\.. 不要在绘制方法中加载资源。一种绘画方法必须快速完成!在应用程序启动时加载图像并将其存储为类的属性。 3) 为了尽快获得更好的帮助,请发布minimal reproducible exampleShort, Self Contained, Correct Example。 4) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。
  • .. btn.setText("TEST WITH ME"); 5) 文本可以在按钮构造函数中传递。 6)无需对用户大喊大叫。最好使用"Test With Me""Test with me"
  • 你已经基本打破了油漆链要求

标签: java swing paintcomponent


【解决方案1】:

我正在为 JButton 设置背景图片

无需进行自定义绘画。您只需向按钮添加一个图标,按钮就会绘制图像。

如果您想在图像顶部显示文字,则只需使用按钮的属性:

button.setHorizontalTextPosition(...);
button.setVerticalTextPosition(...);

【讨论】:

    【解决方案2】:

    我可能没有详细说明我真正想要的东西。但我想出了答案。

    @Override
    public void paintComponent(Graphics g){
        Dimension size = this.getSize();
        g.drawImage(Toolkit.getDefaultToolkit().getImage("C:\\User\\Downloads\\MainMenu.jpg"), 0, 0, size.width, size.height, this);
        FontMetrics fm = g.getFontMetrics();
        int x = (getWidth() - fm.stringWidth("String Value To Set")) / 2;
        int y = ( (getHeight() - fm.getHeight() ) / 2) + fm.getAscent() ;
        g.drawString(String Value To Set, x, y);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多