#java #swing #user-interface #jbutton #imageicon
#java #качать #пользовательский интерфейс #jbutton #imageicon
Вопрос:
Я разрабатываю графический интерфейс с использованием Eclipse на Mac, и я хочу JButton
, чтобы отображался только значок, который я установил. В Mac OS это выглядит нормально, но когда я экспортирую его в файл jar и запускаю в ОС Windows, JButton
выглядит так:
Границы — это все EmptyBorder
.
Что я сделал не так? Как я могу убрать квадрат сзади?
Комментарии:
1. Звучит как проблема с L amp; F. И, возможно, две операционные системы по-разному интерпретируют прозрачные пиксели в формате файла, который вы используете (хотя мне это кажется маловероятным). Какой формат файла вы используете? Кроме того, если вы можете создать scce , это может оказаться полезным.
2. @Xiaofan Wu просто убедитесь, что это состояние для JButton из Windows или из MAC OS
Ответ №1:
Чтобы правильно ответить на этот вопрос, скорее всего, потребуется SSCCE. В любом случае, я полагаю, что вы захотите вызвать setContentAreaFilled(false)
свои JButton
экземпляры. Это должно эффективно удалить «квадрат».
Однако важно отметить, что точное поведение вызова этой функции зависит от компонента за компонентом и от L amp; F-по-L amp; 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());
}
}
}
Комментарии:
1. 1 работает
com.apple.laf.AquaLookAndFeel
, но подсказки пользовательского интерфейса «Включено и нажато» исчезают; для развлечения попробуйте добавитьthis.setPressedIcon(UIManager.getIcon("OptionPane.warningIcon"))
.2. @mre: setContentAreaFilled(false) работает! но я не писал свой собственный класс JButton, мне просто понравился OKButton.setContentAreaFilled(false); и так далее. Это работает!
Ответ №2:
1) невозможно воспроизвести это, слишком сложно сказать, не видя кода, который вы написали для этого,
2) поскольку вы коснулись XxxButtonUI, и это действительно проблема, связанная с родной ОС, какой внешний вид и ощущения используются для этого
3) что произойдет, если вы переопределите MetalButtonUI?
4) есть ли прозрачный фон, или с каким-либо цветом, или …