Пользовательский внешний вид кнопки Matlab с Java
Я хочу изменить внешний вид кнопки Matlab с помощью Java. Для этого я использую приложение Findjobj. Однако из-за того, что я не знаю Java, у меня возникают проблемы с правильным использованием классов Java, поэтому мне нужно, чтобы у моей кнопки были закругленные углы. Основываясь на информации, найденной здесь), я попытался настроить кнопку с классом BorderFactory:
hButton = uicontrol('string','click me!');
jButton = findjobj(hButton);
jButton.setCursor(java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
jButton.setBorder(BorderFactory.createLineBorder(red,1,true));
Но это не работает. Я получил следующее сообщение об ошибке:
??? Undefined function or variable 'red'.
Error in ==> de at 4
jButton.setBorder(BorderFactory.createLineBorder(red,1,true));
РЕДАКТИРОВАТЬ: я понимаю, что я забыл включить классы Java для цвета и LineBorder. После исправления код выглядит так:
import java.awt.Color;
import javax.swing.border.LineBorder;
hButton = uicontrol('Style','pushbutton','String','click me!',...
'Units','normalized','Position',[0.156 0.64 0.688 0.1],'FontSize',9,...
'ForegroundColor','w','BackgroundColor','k');
jButton = findjobj(hButton);
jButton.setCursor(java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
jButton.setBorder(LineBorder(Color.white,5,true));
Тем не менее, результат все еще будет неприятен для меня. Вот окончательный вид. Я могу заставить углы быть закругленными.
2 ответа
Если вы хотите использовать кнопки с закругленными углами, вам нужно будет использовать функцию Look & Feel, делегат пользовательского интерфейса кнопки которой рисует кнопки с закругленными углами. Примеры включают com.apple.laf.AquaButtonUI
, проиллюстрировано здесь, и javax.swing.plaf.synth.SynthLookAndFeel
, показано здесь. Вы также можете реализовать свой собственный ButtonUI
а также Border
, как показано здесь, но вам придется решить, стоит ли это усилий.
Приложение: Глядя на этот связанный вопрос Matlab и соответствующее учебное пособие по Swing, обратите внимание: "Если вы собираетесь установить L&F, вы должны сделать это как самый первый шаг в вашем приложении".
Это должно быть Color.red
или же Color.RED
,
Обратите внимание, что BorderFactory
Используемый там метод был введен только в Java 1.7 (недавно). Чтобы сделать его совместимым с версиями до 1.3, используйте прямой LineBorder(Color,int,boolean)
конструктор.