Java Swing - 制作透明的 JButtons,不透明的边框
Java Swing - Making Transparent JButtons, Opaque borders
我有一个 JFrame,在其中有一个由地图图像填充的 JLabel。我想在地图图像上方的网格中有可点击的方形“瓷砖”。为此,我制作了一个大的 JButton 网格,并将其添加到包含 Map 的 JLabel 中。但是,看不到地图,因此我将 JButton 设置为完全透明。但是,当它们是透明的时,我看不到一个 JButton 在哪里结束,另一个 JButton 在哪里开始。我想创建一个 JButton,它在内部是完全透明的,但周围仍然有一个可见的边框。我试过 setOpaque(false)
然后 setBorderPainted(true)
但这又使它们变得不透明。我已经尝试了我能找到的一切,但没有任何反应。有什么建议吗?
再说一次,我只想要一个透明的 JButton 和可见的边框
您应该可以用自己的...替换边框...
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);
}
}
}
您可能需要在内部使用 CompoundBorder
和 EmptyBorder
来提供一些填充(我尝试使用 setMargins
但它似乎没有用)
我有一个 JFrame,在其中有一个由地图图像填充的 JLabel。我想在地图图像上方的网格中有可点击的方形“瓷砖”。为此,我制作了一个大的 JButton 网格,并将其添加到包含 Map 的 JLabel 中。但是,看不到地图,因此我将 JButton 设置为完全透明。但是,当它们是透明的时,我看不到一个 JButton 在哪里结束,另一个 JButton 在哪里开始。我想创建一个 JButton,它在内部是完全透明的,但周围仍然有一个可见的边框。我试过 setOpaque(false)
然后 setBorderPainted(true)
但这又使它们变得不透明。我已经尝试了我能找到的一切,但没有任何反应。有什么建议吗?
再说一次,我只想要一个透明的 JButton 和可见的边框
您应该可以用自己的...替换边框...
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);
}
}
}
您可能需要在内部使用 CompoundBorder
和 EmptyBorder
来提供一些填充(我尝试使用 setMargins
但它似乎没有用)