2012-10-28 19 views
2

我處於必須重新使用和修改其他人代碼以創建圖像處理應用程序的位置。以下代碼用於設置框架及其GUI。我遇到的問題是當在菜單欄上單擊文件單詞時,菜單項會列在originalImage容器中包含的畫布下方。 下面是代碼:爲什麼我的菜單欄顯示在容器中的JPanel下面?

public ImageLoader(){  
    super("IRIS Application"); 
    JMenu fileMenu = new JMenu("File"); 

    JMenuItem fileOpenChoice = new JMenuItem("Open File"); 
    fileOpenChoice.addActionListener(new FileOpener()); 
    fileMenu.add(fileOpenChoice); 

    JMenuItem fileSaveChoice = new JMenuItem("Save File"); 
    fileSaveChoice.addActionListener(new FileSaver()); 
    fileMenu.add(fileSaveChoice); 

    JMenu processMenu = new JMenu("Process"); 

    JMenuItem reduceContrast = new JMenuItem("Reduce Contrast"); 
    reduceContrast.addActionListener(new ReduceContrast()); 
    processMenu.add(reduceContrast); 

    JMenuItem scale = new JMenuItem("Scale"); 
    scale.addActionListener(new Scaler()); 
    processMenu.add(scale); 

    JMenuItem sobel = new JMenuItem("Sobel"); 
    sobel.addActionListener(new Sobel()); 
    processMenu.add(sobel); 

    JMenuItem prewitt = new JMenuItem("Prewitt"); 
    prewitt.addActionListener(new Prewitt()); 
    processMenu.add(prewitt); 

    originalImage = new BufferedImage(565, 584, BufferedImage.TYPE_BYTE_GRAY); 
    processedImage = new BufferedImage(565, 584, BufferedImage.TYPE_BYTE_GRAY); 
    originalRaster = originalImage.getRaster(); 
    processedRaster = processedImage.getRaster(); 
    ic = new ImageCanvas(); 
    pc = new ImageCanvas(); 

    Container content = this.getContentPane(); 
    content.setLayout(new FlowLayout()); 
    JPanel originalContainer = new JPanel(); 
    originalContainer.add(ic); 
    originalContainer.setSize(ic.getWidth(), ic.getHeight()); 
    originalContainer.setBorder(new EtchedBorder()); 
    JPanel processedContainer = new JPanel(); 
    processedContainer.add(pc); 
    processedContainer.setSize(pc.getWidth(), pc.getHeight()); 
    processedContainer.setBorder(new EtchedBorder()); 
    JPanel imagePanel = new JPanel(); 
    imagePanel.setLayout(new FlowLayout()); 
    imagePanel.add(originalContainer); 
    imagePanel.add(processedContainer); 
    //content.add(imagePanel, BorderLayout.NORTH); 
    JPanel originalGrid = new JPanel(); 
    originalGrid.setLayout(new GridLayout(0,1,5,0)); 
    JPanel processedGrid = new JPanel(); 
    processedGrid.setLayout(new GridLayout(0,1,5,0)); 
    originalText = new JTextField("Original Text"); 
    JButton originalButton = new JButton("View Coordinates Table"); 
    originalGrid.add(originalText); 
    originalGrid.add(originalButton); 
    JTextField processedText = new JTextField("Processed Text"); 
    JButton processedButton = new JButton("View Coordinates Table"); 
    processedGrid.add(processedText); 
    processedGrid.add(processedButton); 
    JPanel informationPanel = new JPanel(); 
    informationPanel.setBackground(Color.red); 
    informationPanel.setLayout(new BorderLayout()); 
    informationPanel.add(originalGrid, BorderLayout.WEST); 
    informationPanel.add(processedGrid, BorderLayout.EAST); 
    //content.add(informationPanel, BorderLayout.SOUTH); 
    ic.addMouseMotionListener(new ImageMouseMotionListener(ic, originalText)); 
    pc.addMouseMotionListener(new ImageMouseMotionListener(pc, processedText)); 
    JMenuBar bar = new JMenuBar(); 
    bar.add(fileMenu); 
    bar.add(processMenu); 

    content.add(imagePanel, BorderLayout.NORTH); 
    content.add(informationPanel, BorderLayout.SOUTH); 
    setJMenuBar(bar); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(1200, 725); 
    setResizable(false); 
    setVisible(true); 
    setLocation(125, 0); 

} 

我知道菜單欄是好的,所以我假設它的我已經添加了畫布JPanel的方式。應該在JPanel中設置它的z順序嗎? 我讀過我家裏的書,沒有提到這種問題。 謝謝, 丹尼爾

+0

剝離您的代碼並將其完成到SSCCE。 – kleopatra

+0

[回覆@Michael Dunn](http://www.coderanch.com/t/596384/GUI/java/JMenuBar-menu-displaying-below-component) – mKorbel

+0

@mKorbel混合_應該不再是一個問題,正確完成:-)丹尼爾,在沒有通知的情況下交叉發帖被認爲是有點不禮貌的一面(因爲助手可能重複的努力) – kleopatra

回答

0

混合AWT和Swing組件會引起重疊問題,Canvas是一個AWT組件,使用的JPanel,而不是 JDK1.6_12後,您可以同時使用的安全性。

相關問題