代码之家  ›  专栏  ›  技术社区  ›  SamHoque

在JPanel中填充JButton

  •  0
  • SamHoque  · 技术社区  · 7 年前

    我有一个JPanel作为我的应用程序的topbar,我正在尝试设计topbar按钮,但我面临一个问题。

    enter image description here

    enter image description here

    如您所见,颜色填充在整个条形图中。我想重现这个。

    下面是创建悬停效果的自定义JButtonClass的代码。

    public class LynxButton extends JButton {
        public LynxButton(){
            super.setContentAreaFilled(false);
        }
    
        public LynxButton(String text) {
            super(text);
            super.setContentAreaFilled(false);
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            Color pressedColor = ThemeManager.red_LYNX.darker();
            if (getModel().isPressed()) {
                g.setColor(pressedColor);
            } else if (getModel().isRollover()) {
                g.setColor(pressedColor);
            } else {
                g.setColor(getBackground());
            }
            g.fillRect(0, 0, getWidth(), getHeight());
            super.paintComponent(g);
        }
    
    
        @Override
        public void setContentAreaFilled(boolean b) {
        }
    }
    

    然后我们使用

        LynxButton exitButton = new LynxButton();
        exitButton.setIcon(...);
        exitButton.setBorder(null);
    

    我曾试图设置保证金,看看它是否解决了这个问题,但同样没有运气。

    exitButton.setMargin(new Insets(0, 0, 0, 0));
    

    编辑:忘记显示JPanel定义

    JPanel buttonContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    

    这个 buttonContainer

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   XtremeBaumer    7 年前

    你没有计算 hgap 和 vgap FlowLayout 在里面这些行为就像一个自然边界。

    您所需要做的就是更改 JPanel 到 new JPanel(new FlowLayout(FlowLayout.RIGHT), 0, 0)

    示例代码:

    public static void main(String[] args) {
        JFrame f = new JFrame();
        TestA b = new TestA("X");
        JPanel buttonContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
        buttonContainer.setBackground(Color.GREEN);
        buttonContainer.add(b);
        f.add(buttonContainer);
        f.pack();
        f.setVisible(true);
    }
    

    TestA LynxButton

    class TestA extends JButton {
        public TestA() {
            super.setContentAreaFilled(false);
        }
    
        public TestA(String text) {
            super(text);
            super.setContentAreaFilled(false);
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            Color pressedColor = Color.RED;
            if (getModel().isPressed()) {
                g.setColor(pressedColor);
            } else if (getModel().isRollover()) {
                g.setColor(pressedColor);
            } else {
                g.setColor(getBackground());
            }
            g.fillRect(0, 0, getWidth(), getHeight());
            super.paintComponent(g);
        }
    
        @Override
        public void setContentAreaFilled(boolean b) {
        }
    }
    
    推荐文章