Добрый день. На java программирую совсем недавно, стокнулся с проблемой: Если в созданном окне нажать мышью на полосе прокрутки в treeview, то меню начинает открываться под treeview. если нажать на любой элемент дерева (папку, лист), то меню начинает отображаться нормально. Может кто сталкивался с подобным, как исправить поведение? Код | import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.ScrollPane; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.util.prefs.Preferences;
import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.JTree; import javax.swing.LookAndFeel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.ButtonUI; import javax.swing.plaf.ComboBoxUI; import javax.swing.plaf.MenuBarUI; import javax.swing.plaf.MenuItemUI; import javax.swing.plaf.ToolBarUI; import javax.swing.plaf.TreeUI; import javax.swing.tree.DefaultMutableTreeNode;
public class test extends WindowAdapter { public static void main(String[] args){ new test().Show(); } public static final String hiddenKey="-h"; public static boolean hiddenKeyActivated=false; private JFrame mw; private JButton btAdd=new JButton("Create"); private JButton btCreate=new JButton("Create"); private JButton btDelete=new JButton("Delete"); private JButton btUp=new JButton("Up"); private JButton btDown=new JButton("Down"); //private JButton btSaveItem=new JButton("Save Item"); private JMenuItem jmOpenJSONOptions=new JMenuItem("Open Options"); private JMenuItem jmOpen1=new JMenuItem("Import JSON..."); private JMenuItem jmOpen2=new JMenuItem("Open..."); private JMenuItem jmSave1=new JMenuItem("Export JSON..."); private JMenuItem jmSave3=new JMenuItem("Save as..."); private JMenuItem jmSave22=new JMenuItem("Save..."); private JMenuItem jmExit=new JMenuItem("Exit"); private DefaultMutableTreeNode nActionsHead=new DefaultMutableTreeNode("Scheduler"); private JTree jt=new JTree(nActionsHead); private JComboBox selType=new JComboBox(new String[]{"Action","Option"}); private JTextField txtType=new JTextField("0x0"); public static boolean changed=false; public static test UI=null; private JPanel editorPanel=new JPanel(); private JToolBar toolbar=new JToolBar() ; private JPanel top=new JPanel(); Preferences s=Preferences.userRoot(); public Class<?> WindowsButtonUI=null; public Class<?> WindowsComboBoxUI=null; public Class<?> WindowsLookAndFeel=null; public Class<?> WindowsMenuBarUI=null; public Class<?> WindowsMenuItemUI=null; public Class<?> WindowsToolBarUI=null; public Class<?> WindowsTreeUI=null; public void Show(){ try { WindowsButtonUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsButtonUI"); WindowsComboBoxUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsComboBoxUI"); WindowsLookAndFeel=Class.forName("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); WindowsMenuBarUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsMenuBarUI"); WindowsMenuItemUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsMenuItemUI"); WindowsToolBarUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsToolBarUI"); WindowsTreeUI=Class.forName("com.sun.java.swing.plaf.windows.WindowsTreeUI"); UIManager.setLookAndFeel((LookAndFeel) WindowsLookAndFeel.newInstance()); } catch (UnsupportedLookAndFeelException e) {
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} btDelete.setEnabled(false); btUp.setEnabled(false); btDown.setEnabled(false); btAdd.setEnabled(false); jmOpen1.setEnabled(false); jmOpen2.setEnabled(false); jmSave1.setEnabled(false); jmSave3.setEnabled(false); selType.setEditable(true); //main menu JMenuBar mb=new JMenuBar(); JMenu pm=new JMenu("File"); pm.add(jmOpen2); pm.add(jmSave22); pm.add(jmSave3); pm.addSeparator(); pm.add(jmOpen1); pm.add(jmSave1); pm.addSeparator(); pm.add(jmOpenJSONOptions); pm.addSeparator(); pm.add(jmExit); mb.add(pm); mw=new JFrame();
ScrollPane sp=new ScrollPane(); sp.add(jt); sp.setBounds(0, 0, 300, 400); top.setLayout(new BorderLayout()); top.add(sp,BorderLayout.WEST); toolbar.add(btAdd); toolbar.add(btDelete); top.add(toolbar,BorderLayout.NORTH); selType.setVisible(false); txtType.setVisible(false); btCreate.setVisible(false); top.add(editorPanel,BorderLayout.CENTER); mw.add(top,BorderLayout.CENTER); mw.setJMenuBar(mb); //register listeners mw.addWindowListener(this); //show mw.setBounds(0, 0, 800, 400); mw.setMaximumSize(new Dimension(900,600)); mw.setResizable(false); mw.setVisible(true); mw.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
System.setErr(null); System.setOut(null); try{ mb.setUI((MenuBarUI) WindowsMenuBarUI.newInstance()); jt.setUI((TreeUI) WindowsTreeUI.newInstance()); //jt.setBorder(new EmptyBorder(0, 0, 0, 0)); toolbar.setUI((ToolBarUI) WindowsToolBarUI.newInstance()); jmOpenJSONOptions.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmOpen1.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmOpen2.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmSave1.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmSave22.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmSave3.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); jmExit.setUI((MenuItemUI) WindowsMenuItemUI.newInstance()); selType.setUI((ComboBoxUI) WindowsComboBoxUI.newInstance()); btCreate.setUI((ButtonUI) WindowsButtonUI.newInstance()); }catch(Exception e){ } test.UI=this; nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); nActionsHead.add(new DefaultMutableTreeNode("1")); } @Override public void windowClosing(WindowEvent ev){ if(changed==false){ System.exit(0); }else{ if(JOptionPane.showConfirmDialog(mw, "There is unsaved data. Are you sure you want to exit?", "", JOptionPane.YES_NO_OPTION)==JOptionPane.NO_OPTION){ }else{ System.exit(0); } } } }
|
|