Hej alle sammen jeg prøver at mixe JavaFX og Swing med JTextPane (Text Editor) og JTextArea (Linje numre) hvilket går nogenlunde.
Jeg bruger også tabs (JavaFX tabs), til at holde på flere Text Editor og Linje Numre... Men mit problem er at Linje numre kun virker i en af de tabs jeg har åbne. Så de andre tabs linje numre ikke virker her er min kode :
Tabs
- public static TabPane pane;
- public static ArrayList<Tab> tabList;
- public static ArrayList<ScrollPane> scrollist;
- public static int SelectedIndex;
-
- public static void setTab() {
- pane = new TabPane();
- tabList = new ArrayList<Tab>();
- scrollist = new ArrayList<>();
-
- addTab("Hej Verden");
- addTab("Hej Verden 1");
- addTab("Hej Verden 2");
-
- pane.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Tab> ov, Tab t, Tab t1) -> {
- SelectedIndex = pane.getSelectionModel().getSelectedIndex();
- System.out.println(SelectedIndex);
- });
- }
-
- public static void addTab(String title) {
- SwingNode swingNode = new SwingNode();
- createSwingContent(swingNode);
-
- Tab tab = new Tab(title);
- tab.setContent(swingNode);
-
- pane.getTabs().add(tab);
- tabList.add(tab);
-
- }
-
- private static void createSwingContent(SwingNode swingNode) {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- JScrollPane jsp = new JScrollPane();
- ArrayList<JScrollPane> jsplist = new ArrayList<>();
- TextArea area = new TextArea();
-
- jsp.getViewport().add(area.editor.get(SelectedIndex));
- jsp.setRowHeaderView(area.Lines.get(SelectedIndex));
- jsplist.add(jsp);
- swingNode.setContent(jsplist.get(SelectedIndex));
- }
- });
- }
TextArea:
- private static JTextPane pane;
- private static JTextArea line;
- public ArrayList<JTextPane> editor;
- public ArrayList<JTextArea> Lines;
- public TextArea() {
- editor = new ArrayList<JTextPane>();
- Lines = new ArrayList<>();
- pane = new JTextPane();
- line = new JTextArea("1");
- line.setEditable(false);
- line.setBackground(Color.black);
- line.setForeground(Color.orange);
- pane.setBorder(null);
-
- pane.getDocument().addDocumentListener(new DocumentListener() {
- public String getText(){
- int caretPosition = pane.getDocument().getLength();
- Element root = pane.getDocument().getDefaultRootElement();
- String text = "1" + System.getProperty("line.separator");
- for(int i = 2; i < root.getElementIndex( caretPosition ) + 2; i++){
- text += i + System.getProperty("line.separator");
- }
- return text;
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- line.setText(getText());
- }
-
- @Override
- public void insertUpdate(DocumentEvent e) {
- line.setText(getText());
- }
-
- @Override
- public void changedUpdate(DocumentEvent e) {
- line.setText(getText());
- }
- });
-
- editor.add(pane);
- Lines.add(line);
- }
Tak på forhånd, og håber i vil hjælpe. Ha' en god dag