Пользовательский внешний вид кнопки 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) конструктор.

Другие вопросы по тегам