【问题标题】:How to rename tab's text on double click in JavaFX 2?如何在 JavaFX 2 中双击重命名选项卡的文本?
【发布时间】:2013-06-18 13:34:29
【问题描述】:

我有一个简单的代码将标签添加到 tabPane

@FXML
private void addNewWorkspaceTab(ActionEvent event) {

    Tab workspaceTab = new Tab();
    workspaceTab.setText("New Workspace");
    tabpaneWorkspace.getTabs().addAll(workspaceTab);
    tabpaneWorkspace.setTabClosingPolicy(TabPane.TabClosingPolicy.SELECTED_TAB);

}

通过鼠标左键双击一个选项卡,我想重命名(通过输入新文本)选定的选项卡:我该怎么做?

【问题讨论】:

  • 究竟是什么问题,onmouseclicked 与 clickcount 或重命名。文本字段应该是内联的(内联编辑)还是只是其他地方的简单文本字段?
  • 我想更改文本:现在选项卡有“新工作区”作为文本,我想将此文本设置为可编辑以便键入新字符串
  • 因为选项卡没有 onclickhandler 我认为最好的方法是将tab.setGraphic(...); 设置为一个按钮并在那里实现它(MouseEvent 有一个 clickCount)..

标签: tabs javafx-2


【解决方案1】:

这是我的问题的解决方案:

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;

/**
*
* @author utente
*/
public class TabSetText {

public Tab createEditableTab(String text) {  
final Label label = new Label(text);  
final Tab tab = new Tab();  
tab.setGraphic(label);  
final TextField textField = new TextField();  
label.setOnMouseClicked(new EventHandler<MouseEvent>() {  
  @Override  
  public void handle(MouseEvent event) {  
    if (event.getClickCount()==2) {  
      textField.setText(label.getText());  
      tab.setGraphic(textField);  
      textField.selectAll();  
      textField.requestFocus();  
    }  
  }  
}); 


textField.setOnAction(new EventHandler<ActionEvent>() {  
  @Override  
  public void handle(ActionEvent event) {  
    label.setText(textField.getText());  
    tab.setGraphic(label);  
  }  
});


textField.focusedProperty().addListener(new ChangeListener<Boolean>() {  
  @Override  
  public void changed(ObservableValue<? extends Boolean> observable,  
      Boolean oldValue, Boolean newValue) {  
    if (! newValue) {  
      label.setText(textField.getText());  
      tab.setGraphic(label);            
    }  
  }  
});  
return tab ;  
}  

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2012-06-12
  • 2021-12-05
相关资源
最近更新 更多