java - 选项出现在 JMenu 上

标签 java swing jtabbedpane jmenu

我正在创建一个程序界面,用户在菜单中选择某些内容,然后它将显示几个选项卡。某些选项卡内有一些选项。当用户从菜单中选择某些内容时,问题就出现了,选项卡变得可见,然后用户再次单击菜单,这就是发生的情况: menu bugged

代码现在已经扩展,所以我将继续创建组件。

菜单项创建:

JMenu menuArquivo = new JMenu("Arquivo");
menuBar.add(menuArquivo);

JMenuItem arqAC = new JMenuItem("Aviso de Cobran\u00E7a");
menuArquivo.add(arqAC);
arqAC.addActionListener(menuItemListener);
arqAC.setActionCommand("AC");

将 tabPane 添加到 contentPane:

contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

tabs = new ArquivoTabs();
JTabbedPane tabbedPane = tabs.getTabs();
tabbedPane.setBounds(0, 0, 1061, 600);
tabbedPane.setSelectedIndex(index);
contentPane.add(tabbedPane);
tabbedPane.setTitleAt(index, title);
revalidate();

内容 Pane :

public ArquivoTabs() {

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    add(tabbedPane);

    ACTab act = new ACTab(tabbedPane);
    tabbedPane.addTab("AC", null, act, "Aviso de Cobran\u00E7a");
}

创建一个选项卡:

public ACTab(JTabbedPane tp) {
    tabbedPane = tp;
    aut = Authority.getAuthority();             
    ButtonListener buttonListener = new ButtonListener();

    setLayout(null);

    tfAC = new JTextField();
    tfAC.setBounds(10, 25, 251, 20);
    add(tfAC);
    tfAC.setColumns(10);

    bpAC = new JButton("Procurar");
    bpAC.setBounds(271, 24, 75, 23);
    add(bpAC);
    bpAC.addActionListener(buttonListener);
    bpAC.setActionCommand("bpAC");

    JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
    separator.setBounds(10, 68, 336, 9);
    add(separator,
              BorderLayout.LINE_START);

    btnGerarAC = new JButton("GERAR");
    btnGerarAC.setBounds(271, 346, 75, 23);
    add(btnGerarAC);
    btnGerarAC.addActionListener(buttonListener);
    btnGerarAC.setActionCommand("btnGerarAC");


    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(10, 113, 336, 106);
    add(scrollPane);

    tfDescDeb = new JTextArea();
    scrollPane.setViewportView(tfDescDeb);
    tfDescDeb.setFont(new Font("Arial", Font.PLAIN, 14));
    tfDescDeb.setColumns(10);
    tfDescDeb.setLineWrap(true);
    tfDescDeb.setWrapStyleWord(true);
    tfDescDeb.setEditable(false);

    motTypes = DescDeb.getMotTypes();

    choice = new Choice();
    choice.setBounds(10, 87, 336, 20);
    add(choice);
    choice.add("");
    for(DescDeb mt : motTypes){
        choice.add(mt.getTitle());
    }
    choice.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent ie)
        {
            for(DescDeb mt : motTypes){
                if(choice.getSelectedItem().equals(mt.getTitle())){
                    tfDescDeb.setEditable(false);
                    tfDescDeb.setText(mt.getText());
                }
            }
        }
    });


    JLabel lblDescDeb = new JLabel("Descri\u00E7\u00E3o dos d\u00E9bitos:");
    lblDescDeb.setBounds(10, 73, 110, 14);
    add(lblDescDeb);

    JLabel lblAutRole = new JLabel("Cargo da Autoridade:");
    lblAutRole.setBounds(10, 258, 110, 14);
    add(lblAutRole);

    txtAutRole = new JTextField();
    txtAutRole.setEditable(false);
    txtAutRole.setColumns(10);
    txtAutRole.setBounds(134, 258, 212, 20);
    txtAutRole.setText(aut.getRole());
    add(txtAutRole);

    JLabel lblAutMat = new JLabel("Matr\u00EDcula da Autoridade:");
    lblAutMat.setBounds(10, 286, 118, 14);
    add(lblAutMat);

    txtAutMat = new JTextField();
    txtAutMat.setEditable(false);
    txtAutMat.setColumns(10);
    txtAutMat.setBounds(134, 286, 212, 20);
    txtAutMat.setText(aut.getRegistration());
    add(txtAutMat);

    JLabel lblAutName = new JLabel("Nome da Autoridade:");
    lblAutName.setBounds(10, 230, 102, 14);
    add(lblAutName);

    txtAutName = new JTextField();
    txtAutName.setEditable(false);
    txtAutName.setBounds(134, 230, 212, 20);
    txtAutName.setText(aut.getName());
    add(txtAutName);

    JButton btnEditarAutoridade = new JButton("Editar Autoridade");
    btnEditarAutoridade.setBounds(226, 317, 119, 23);
    btnEditarAutoridade.addActionListener(buttonListener);
    btnEditarAutoridade.setActionCommand("edtAut");
    add(btnEditarAutoridade);

    JLabel lblArquivoDeEntrada = new JLabel("Arquivo de Entrada:");
    lblArquivoDeEntrada.setBounds(10, 11, 110, 14);
    add(lblArquivoDeEntrada);
}

我必须传递 JTabbedPane tp 才能将其与不相关的内容一起使用。

如果需要更多部分的代码,请告诉我。

最佳答案

您正在将 Swing 组件(JMenuJTabbedPane)与 AWT 组件(Choice)混合在一起。这会导致各种问题,包括 Choice 组件与 JMenu 的重叠。

使用JComboBox而不是Choice

关于java - 选项出现在 JMenu 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41121747/

相关文章:

java - AspectJ 编译时编织 - 获取输出源代码?

swing - Kotlin @JvmStatic 和伴随对象中的意外覆盖

java - Glazedlists 死了吗?

java - 如何为我的图表创建可运行的线程?

java - 在 JTabbedPane 上触发 stateChanged 事件

java - 如何使用 Spring Data 将任意数据的子文档持久化到 MongoDB?

java - 我可以在使用 Cordova 的 iOS 应用程序中使用 Java 库吗?

java - 如何使用文件中的值绘制折线图?

java - Jfreechart索引越界异常

java - JTabbedPane的选项卡区域添加按钮,可以显示,但无法点击