Граница JButton не исчезает, даже если для Border установлено значение EmptyBorder - PullRequest
4 голосов
/ 05 октября 2011

Я проектирую графический интерфейс с использованием Eclipse на Mac и хочу, чтобы JButton отображал только установленную мной иконку. В Mac OS он выглядит хорошо, но когда я экспортирую его в файл jar и вхожу в ОС Windows, JButton выглядит так:

enter image description here

Границы все EmptyBorder.

Что я сделал не так? Как я могу сделать так, чтобы квадрат сзади исчезал?

Ответы [ 2 ]

10 голосов
/ 05 октября 2011

Чтобы правильно ответить на этот вопрос, скорее всего, потребуется SSCCE .В любом случае, я считаю, что вы захотите вызвать setContentAreaFilled(false) в ваших JButton экземплярах.Это должно эффективно удалить "квадрат".

Однако важно отметить, что точное поведение вызова этой функции зависит от компонента к компоненту и от L & F к L & F.


import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public final class JButtonDemo {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();             
            }
        });
    }

    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JIconButton());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static final class JIconButton extends JButton{
        private static final long serialVersionUID = 7274140930080397481L;

        public JIconButton(){
            super(UIManager.getIcon("OptionPane.informationIcon"));
            setContentAreaFilled(false);
            setFocusPainted(false);
            setBorder(BorderFactory.createEmptyBorder());
        }
    }
}

enter image description here

2 голосов
/ 05 октября 2011

1) невозможно воспроизвести это, слишком сложно сказать, не увидев код, который вы для этого написали,

2) потому что вы прикоснулись к XxxButtonUI, и это действительно проблема, связанная с Native OS, для которой

используется Look and Feel

3) что произойдет, если вы переопределите MetalButtonUI?

4) есть ли полупрозрачный фон или какой-то цвет, или ...

...