JPanel里面的Jbuttons,右边是背景图片底角

时间:2015-07-23 15:12:50

标签: java jbutton

有人可以解释一下我怎么能在jLabel里面放几个jButton,它们有像this图像那样的背景图像?主jFrame未修饰,并设置为全屏。

我看到很多不同的例子 this或类似this,但这些示例仅在jPanel中显示单个按钮。

2 个答案:

答案 0 :(得分:2)

就我个人而言,我会避免使用JLabel来实现此目的,它不会根据内容计算所需的大小,而是根据icontext属性来计算。< / p>

这可能是好事或坏事,但如果您不了解它,它可能会让您不知不觉。

相反,我会使用自定义的JPanel,这样您就可以定义调整大小和填充规则等内容,for examplefor example

现在,一旦你完成了覆盖,你需要创建一个按钮面板。我更喜欢创建一个专门的类,因为它更容易隔离功能和管理,但那就是我......

public class ButtonPane extends JPanel {

    public ButtonPane() {
        setLayout(new GridBagLayout());
        setBorder(new EmptyBorder(8, 8, 8, 8));
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.insets = new Insets(2, 2, 2, 2);

        add(new JButton("Button 1"), gbc);
        add(new JButton("Button 2"), gbc);
        add(new JButton("Button 3"), gbc);
    }

}

接下来,您需要将此面板添加到您的背景

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(backgroundPane);
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.SOUTHEAST;
gbc.insets = new Insets(30, 30, 30, 30);

ButtonPane buttonPane = new ButtonPane();
frame.add(buttonPane, gbc);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

可以产生类似......

的东西

Background image

查看Laying Out Components Within a ContainerHow to Use GridBagLayout了解更多详情

答案 1 :(得分:0)

这些例子确实足够好,我想你应该学习更多关于挥杆的知识。 现在,您可以这样做:

JFrame frame = new JFrame("Hi there");
JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
frame.add(b1);
frame.add(b2);
b1.setBounds(60, 60, 40, 40);
b2.setBounds(10, 10, 40, 40);
frame.setVisible(true);         //in case, add frame.setLayout(null);

您当然可以将按钮添加到JPanel而不是JFrame