2016-12-28 16 views
4

Как сделать кнопку, уложенную за ярлык?JAVAFX Как сделать кнопку уложенной за ярлык, который можно щелкнуть

Кнопка

Button btn = new Button(); 
//TODO: button's main function, like onPressed, onReleased etc. here... 

Пользовательские этикетки

CustomLabel sp = new CustomLabel("Some texts here")); 
//TODO: custom label's main function, like a translucent background etc here... 
//main purpose of this is to overlay the button 

Главная панель

StackPane mainPane = new StackPane(); 
mainPane.getChildren.addAll(btn, sp); 

При этом площадь бее ch пользовательские надписи на ярлыках становятся незаметными.

Есть ли способ сделать кнопку нажатой, хотя, например, оверлейный? Или есть другой способ сделать это? Что-то вроде установки ярлыка на невидимое при нажатии?


EDIT: Чтобы ответить Itamar Green «s вопрос ..

Используя пример, как показано в этой ссылке: Mouse Events get Ignored on the Underlying Layer, она до сих пор не похоже на работу. Кнопка, уложенная под слой, по-прежнему не доступна.

sp.setPickOnBounds(false); 
+1

Возможный дубликат [События мыши проигнорированы на базовом слое] (http://stackoverflow.com/questions/24607969/mouse-events-get-ignored-on-the-underlying-layer) – ItamarG3

+0

Почему вы не используете ' btn.setGraphic (sp) 'вместо? – n247s

+0

У btn уже есть определенный графический набор. – Ronaldo

ответ

2

Вы можете установить mouseTransparent свойства элемента (ов), проведенный на вершине, чтобы true. Обратите внимание, что этот способ все потомки узла игнорируются для событий мыши:

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button("Say 'Hello World'"); 
    btn.setOnAction((ActionEvent event) -> { 
     System.out.println("Hello World!"); 
    }); 
    Region region = new Region(); 
    region.setStyle("-fx-background-color: #0000ff88;"); 
    region.setMouseTransparent(true); 

    StackPane root = new StackPane(btn, region); 

    Scene scene = new Scene(root, 100, 100); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Закомментируйте

region.setMouseTransparent(true); 

и кнопка больше не будет реагировать на события мыши в любом случае ...

0

благодарит за вашу помощь. Думаю, я решил свой собственный вопрос.

Все, что я сделал, было настроено для интерактивного события для моего лейбла.

Label sp = new Label("some texts here") 
sp.setOnMouseClicked(new EventHandler<MouseEvent>() { 
        @Override 
        public void handle(MouseEvent e) { 
         //copy over the button's event. 
        } 
       }); 

Не уверены, есть ли лучший способ сделать это ...