我正在创建一个程序界面,用户在菜单中选择某些内容,然后它将显示几个选项卡。某些选项卡内有一些选项。当用户从菜单中选择某些内容时,问题就出现了,选项卡变得可见,然后用户再次单击菜单,这就是发生的情况: 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 组件(JMenu
、JTabbedPane
)与 AWT 组件(Choice
)混合在一起。这会导致各种问题,包括 Choice
组件与 JMenu
的重叠。
使用JComboBox
而不是Choice
关于java - 选项出现在 JMenu 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41121747/