2016-12-04 1 views
0

menuitems 후에 JMenuBar 줄무늬가 사라지게하려면 어떻게해야합니까? 프레임의 중간에 2 번째 메뉴를 넣고 싶습니다. 그리고이 줄거리로 이상하게 보입니다.버튼 후에 JMenuBar strape이 사라지게하려면 어떻게해야합니까?

배경을 Panel.background로 설정하려고했지만 작동하지 않습니다. 여러 JButton의 당신의 자신의 "메뉴"를 만들려면

import java.awt.*; 

import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 

public class SwingMenuDemo extends JPanel { 

    public SwingMenuDemo(){ 
     setLayout(null); 

     JMenuBar menuBar = new JMenuBar(); 
     menuBar.setBackground(UIManager.getColor("Panel.background")); 
     menuBar.setBounds(0, 0, 450, 25); 

     add(menuBar); 

     JButton btn1 = new JButton("Menu1"); 
     menuBar.add(btn1); 

     JButton btn2 = new JButton("Menu2"); 
     menuBar.add(btn2); 

     JButton btn3 = new JButton("Menu3"); 
     menuBar.add(btn3); 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("SwingMenuDemo"); 

     frame.setPreferredSize(new Dimension(400,400)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.PAGE_AXIS)); 
     frame.getContentPane().add(new SwingMenuDemo()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

} 

enter image description here

+1

당신이 완전히 (HTTPS에서 [의 JMenuBar 요소를 사용하는 일반적인 방법]을 따르지 않는 이유는 어떤 이유가 있다고 할 수있다 /docs.oracle.com/javase/tutorial/uiswing/components/menu.html)? –

답변

3

는 다음과 setBounds(...) (당신이 단지로 후자를 피해야한다 JMenu를 사용하지 않고 null 레이아웃을 사용하지 않는 일반 규칙). 대신 JPanels를 중첩 시키십시오. 각각의 고유 한 레이아웃 관리자를 사용하여 복잡한 GUI를 간단히 만들 수 있습니다.

예를 들어, menuPanel이라는 버튼을 유지하는 JPanel을 만들면 new GridLayout(1, 0) 레이아웃을 제공합니다. 즉, 1 행의 구성 요소 그리드와 가변 개수의 열을 보유하게됩니다 (0의 의미).). 그런 다음에 단추를 넣으십시오.

그런 다음 JPanel을 레이아웃으로 사용하는 다른 JPanel에 배치합니다. 모든 구성 요소가 왼쪽으로 이동합니다.

그런 다음 기본 GUI에 BorderLayout을 사용하고 위 패널을 BorderLayout.PAGE_START 위치의 맨 위에 추가하십시오. 예를 들어 :/:

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class SwingMenuDemo2 extends JPanel { 
    private static final String[] MENU_TEXTS = {"Menu 1", "Menu 2", "Menu 3"}; 
    private static final int PREF_W = 400; 
    private static final int PREF_H = PREF_W; 

    public SwingMenuDemo2() { 
     JPanel menuPanel = new JPanel(new GridLayout(1, 0)); 
     for (String menuText : MENU_TEXTS) { 
      menuPanel.add(new JButton(menuText)); 
     } 

     JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0)); 
     topPanel.add(menuPanel); 

     setLayout(new BorderLayout()); 
     add(topPanel, BorderLayout.PAGE_START); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

    private static void createAndShowGui() { 
     SwingMenuDemo2 mainPanel = new SwingMenuDemo2(); 

     JFrame frame = new JFrame("Swing Menu Demo 2"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
0

당신은

menuBar.setBorderPainted(false); 
관련 문제