【问题标题】:Java Swing - Making Transparent JButtons, Opaque bordersJava Swing - 制作透明的 JButton,不透明的边框
【发布时间】:2020-07-07 19:38:35
【问题描述】:

我有一个 JFrame,在其中有一个由地图图像填充的 JLabel。我想在地图图像上的网格中有可点击的方形“瓷砖”。为此,我制作了一个大型 JButton 网格,并将其添加到包含地图的 JLabel 中。但是,看不到地图,所以我让 JButtons 完全透明。但是,当它们是透明的时,我看不到一个 JButton 的结束位置,以及另一个 JButton 的开始位置。我想创建一个内部完全透明的 JButton,但它周围仍然有可见的边框。我试过setOpaque(false) 然后setBorderPainted(true) 但这使它们再次变得不透明。我已经尝试了我能找到的一切,但没有任何反应。有什么建议吗?

再一次,我想要的只是一个带有可见边框的透明 JButton

【问题讨论】:

标签: java swing jpanel jbutton jlabel


【解决方案1】:

你应该可以用你自己的边框替换...

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBackground(Color.RED);
            setLayout(new GridBagLayout());
            JButton btn = new JButton("Hello");
            btn.setOpaque(false);
            btn.setContentAreaFilled(false);
            btn.setBorderPainted(true);

            btn.setBorder(new LineBorder(Color.BLUE));

            add(btn);

        }

    }
}

您可能需要在内部使用 CompoundBorderEmptyBorder 来提供一些填充(我尝试使用 setMargins,但它似乎不起作用)

【讨论】:

  • 非常感谢,它就像一个魅力,除了一个问题。你给了一个完美的答案,但是现在,边框太大了。你看,地图是 1200 x 600 像素,按钮网格包含 5000 个按钮。 LineBorder激活时,即使粗细参数为1,线粗也过大。有没有办法让线宽变为1像素?
  • 您看到的是每个按钮都有一个 1 像素边框,因此当它与另一个按钮对接时,它将显示为 2 个像素(每个按钮 1 个像素)。您可能需要改用MatteBorder
  • @Notalexander 对不起,不得不去挖掘this example
  • 我采纳了你的建议,制作了只画了底部和右侧的 MatteBorder,看起来很完美。瓷砖不必是像素完美的,所以它工作正常并且看起来很棒。感谢所有的帮助,我真的很感激
猜你喜欢
  • 2012-09-09
  • 2021-11-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多