如何在JavaFX的菜单栏中使用ID?

时间:2019-04-28 18:37:43

标签: java javafx

当使用for循环将菜单项添加到“连接”菜单时,InteliJ IDEA出现以下错误:

无法将javafx.scene.control.Menu设置为“ menuConnection”字段

我认为这是由于某种命名冲突引起的。对Java来说还很陌生,所以不能肯定。

这是我的FXML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox xmlns="http://javafx.com/javafx"
  xmlns:fx="http://javafx.com/fxml"
  fx:controller="kuristo.Controller"
  prefHeight="400.0" prefWidth="600.0">

  <MenuBar>
    <Menu text="File">
        <MenuItem text="Quit" />
    </Menu>
    <Menu text="Connection" fx:id="menuConnection"></Menu>
</MenuBar>

</VBox>

因此,您可以在此文件中看到一个ID为menuConnection的Menu。我将其用作标识希望在此控制器中添加MenuItem的菜单的方法:

package kuristo;

import com.fazecast.jSerialComm.SerialPort;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import java.awt.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;

public class Controller implements Initializable {

    @FXML
    private Menu menuConnection;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        for (int i = 0; i < SerialPort.getCommPorts().length; i++) {

            // String portName = "portName".concat(String.valueOf(i));

            MenuItem port = new MenuItem(SerialPort.getCommPorts()[i].getSystemPortName());

            menuConnection.add(port);

        }

    }

}

我无法编译它。任何帮助将不胜感激。

干杯

1 个答案:

答案 0 :(得分:1)

事实证明...

我的进口不正确。

import java.awt.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;

更改为:

import com.fazecast.jSerialComm.SerialPort;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;

import java.net.URL;
import java.util.ResourceBundle;

故事的寓意,请确保您使用的是JavaFX而不是AWT。