【问题标题】:Why is my JButton icon not showing correctly? [closed]为什么我的 JButton 图标显示不正确? [关闭]
【发布时间】:2016-03-17 13:13:42
【问题描述】:

我目前正在开发一些摇摆应用程序。

当我尝试让JButton 只显示它的图标时,它开始了 重叠两个 JButton 图标。

有没有人知道是什么原因造成的(我有一个图标 上面写着'yes',第二个写着'no'

如果我将鼠标移到一个按钮上(假设它是“是”按钮)并且 然后在另一个上做(在这种情况下是“否”按钮) 'yes' 被画在 'no' 上。

注意:在注释标记的代码中添加了解决方案

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class RunnerTestButtons {

public static void main(String[] args) {
    JFrame frame =new JFrame("Game");
    JPanel panel =new JPanel();
    panel.setLayout(new GridLayout(2, 1));
    frame.setPreferredSize(new Dimension(640, 480));
    panel.setBackground(new Color(0, 255, 0));
    JLabel label =new JLabel("SomeText",SwingConstants.CENTER);
    //here
    label.setOpaque(false);
    JPanel panel2 =new JPanel();
    //and here
    panel2.setOpaque(false);

    panel.add(label);
    panel.add(panel2);
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS));


    JButton lab1=new JButton("txt");
    JButton lab2=new JButton("Boo");
    lab1.setAlignmentX(Box.CENTER_ALIGNMENT);
    lab2.setAlignmentX(Box.CENTER_ALIGNMENT);
    lab1.revalidate();
    lab2.revalidate();
    lab1.repaint();
    lab2.repaint();
    panel2.add(Box.createHorizontalGlue());
    panel2.add(lab1);
    panel2.add(Box.createHorizontalGlue());
    panel2.add(lab2);
    panel2.add(Box.createHorizontalGlue());
    lab1.setOpaque(false);
    lab2.setOpaque(false);

    lab1.setContentAreaFilled(false);
    lab2.setContentAreaFilled(false);

    lab1.setBorderPainted(false);
    lab2.setBorderPainted(false);



    lab1.setBorder(null);
    lab2.setBorder(null);

    frame.add(panel);
    frame.pack();
    frame.setVisible(true);

}

}

【问题讨论】:

  • 你能把你尝试过的代码贴在这里吗?
  • 肯定会在一秒钟内编辑。
  • @vishalgajera:编辑帖子时,请使用> 仅突出显示引用的文本。请不要用它来突出OP的原话。
  • @JakubRogacz 请发布鼠标悬停事件的代码
  • 发布正确的SSCCE 来说明问题。您发布的代码与问题无关。

标签: java swing jbutton


【解决方案1】:
lab1.setBackground(new Color(0, 0, 0, 0));

问题是您试图使按钮透明。你不应该通过使用背景的不透明度来做到这一点。

为了完全透明,最简单的解决方案是让按钮不透明。

所以你应该这样做:

//lab1.setBackground(new Color(0, 0, 0, 0));
lab1.setOpaque(false);
lab1.setContentAreaFilled(false);

查看Backgrounds With Transparency,了解更多信息,了解为什么您的原始方法存在问题以及使用部分透明时的解决方案。

所以您可以看到您发布的原始代码与问题无关,这就是为什么每个问题都应该发布适当的 SSCCE。

【讨论】:

  • 更正了代码...但仍然存在几乎相同的问题。它弄乱了两个按钮并在另一个上渲染了一个
  • @JakubRogacz,您是否修复了所有使用透明度的组件?发布您更新的 SSCCE。再说一次,我无法根据口头描述猜测您实际上在做什么。
  • 已发布。但我同时发现了问题所在。通常,您需要从某个地方调用 repaint 才能使代码正常工作。这是我编写的代码中的一个问题,因为循环必须在 JFrame 之外,就好像它在其中一样会导致事件出现问题。通常,必须有一个循环来重新绘制 JPanel 以使按钮不会被渲染。这很不可思议,因为使用填充的 Button 不重绘没有任何问题。
  • 您没有修复面板或标签。您的代码中的任何地方都不应该有带有 4 个参数的颜色。不,您不需要调用 repaint() 来让 Swing 组件重新绘制自身。 while 循环是完全错误的解决方案,永远不应该这样做。一旦你修复了背景颜色,你的问题就会得到解决。你有没有看过我提供给你的链接???
  • 好的,我同意让它不使用带有 4 个参数的颜色确实有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多