Jbutton 在设计视图中消失

Jbutton disappears in design view

我在 Eclipse 中使用 WindowBuilder。我创建了以下方法以将相同的属性应用于我的应用程序中某些类型的按钮。

在设计视图中,我的btn_Subscribe是不可见的,但在调试时出现了。 但是我的 btn_Login 在设计视图中可见......我不明白。当我将 JButton 添加到内容时,我正在使用我的方法

    // ************************ LOGIN BUTTON ************************ \

JButton btn_Login = new JButton("");
btn_Login.setIcon(new ImageIcon(DietProject.class.getResource("/images/img_login.png")));
btn_Login.setBounds(226, 89, 91, 32);

frmDietPlanner.getContentPane().add(setupCustomButton(btn_Login));
// ************************ SUBSCRIBE BUTTON ************************ \

JButton btn_Subscribe = new JButton("");
btn_Subscribe.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    }
});
btn_Subscribe.setIcon(new ImageIcon(DietProject.class.getResource("/images/img_subscribe.png")));
btn_Subscribe.setBounds(10, 11, 103, 32);
frmDietPlanner.getContentPane().add(setupCustomButton(btn_Subscribe));








private JButton setupCustomButton(JButton jb)
{
    // Remove the ugly border and background on the button
    jb.setBorderPainted(false);
    jb.setBorder(null);
    jb.setContentAreaFilled(false);
    jb.setCursor(new Cursor(Cursor.HAND_CURSOR));

    return jb;
}

如果我执行以下操作,它会在设计器中正常显示。我不明白为什么使用一种方法来应用相同的属性会导致设计器不显示按钮....同时它对我的登录按钮来说工作得很好!我真的不想为我计划使用的每个按钮都编写此代码....

//frmDietPlanner.getContentPane().add(setupCustomButton(btn_Subscribe));
frmDietPlanner.getContentPane().add(btn_Subscribe);
btn_Subscribe.setBorderPainted(false);
btn_Subscribe.setBorder(null);
btn_Subscribe.setContentAreaFilled(false);
btn_Subscribe.setCursor(new Cursor(Cursor.HAND_CURSOR));

我假设 frmDietPlannerJFrame,默认情况下有 BorderLayout 经理。
通过

frmDietPlanner.getContentPane().add(setupCustomButton(btn_Login));
frmDietPlanner.getContentPane().add(setupCustomButton(btn_Subscribe));

您正在将两个按钮添加到同一位置。 如果你想使用 setBounds 设置布局管理器为空。
问题的 MCVE 和解决方案如下所示:

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame {

    Frame()
    {
        /////////////////////////////
        setLayout(null);
        ////////////////////////////
        setSize(400,400);
        JButton btn_Login = new JButton("A");
        btn_Login.setBounds(226, 89, 91, 32);
        getContentPane().add(btn_Login);

        JButton btn_Subscribe = new JButton("B");
        btn_Subscribe.setBounds(10, 11, 103, 32);
        getContentPane().add(btn_Subscribe);
        setVisible(true);
    }

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