2016-12-17 2 views
-1

2つのsplitPanelとメニューバーを含むダイアログボックスを作成しようとしています。どちらのsplitPanelにもjlistが含まれています。jmenubarの横に白い部分があるのはなぜですか?

私のコードを実行すると、メニューバーの横に白い領域が表示されます。下の画像では、白い領域がの横に作成されます。の横に作成されます。ここで

enter image description here

コードの私の一部です:

public class HistList extends JPanel { 
JTable table = new JTable(); 
JMenuItem remove = new JMenuItem("Remove"); 
JScrollPane scrollPane = new JScrollPane(); 
MyTableModel model = new MyTableModel(); 

HistList() { 
    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
     ex.printStackTrace(); 
    } 
    String[] title = {" ", "Time", "Name", "Location"}; 
    Object[][] data = { 
     {false, "01:22:16", "Google", "http://www.google.com"}, 
     {false, "01:22:16", "Yahoo - login", "https://login.yahoo.com/?.src=ym&.intl=us&.lang=en-US&.done=https%3a//mail.yahoo.com"}, 
     {false, "01:22:29", "Oracle | Integrated Cloud Applications and Platform Services", "https://www.oracle.com/index.html"} 
    }; 
    for (int i = 0; i < data.length; i++) { 
     model.addRow(data[i]); 
    } 
    this.table = new JTable(model); 
    this.table.setShowGrid(false); 
    this.scrollPane = new JScrollPane(this.table); 
    Dimension size = new Dimension(510, 380); 
    this.scrollPane.setPreferredSize(size); 
    this.scrollPane.getViewport().setBackground(Color.WHITE); 
    JTextField name = new JTextField(); 
    name.setPreferredSize(new Dimension(scrollPane.getWidth(), 25)); 
    JTextField locationText = new JTextField(); 
    locationText.setPreferredSize(new Dimension(scrollPane.getWidth(), 25)); 
    JPanel textPane = new JPanel(); 
    JLabel nameLabel = new JLabel("Name:"); 
    JPanel textPane1 = new JPanel(); 
    textPane1.setLayout(new BoxLayout(textPane1, BoxLayout.X_AXIS)); 
    textPane1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
    textPane1.add(Box.createHorizontalGlue()); 
    textPane1.add(nameLabel); 
    textPane1.add(Box.createRigidArea(new Dimension(21, 0))); 
    textPane1.add(name); 
    JLabel locationLabel = new JLabel("Location:"); 
    JPanel textPane2 = new JPanel(); 
    textPane2.setLayout(new BoxLayout(textPane2, BoxLayout.X_AXIS)); 
    textPane2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
    textPane2.add(Box.createHorizontalGlue()); 
    textPane2.add(locationLabel); 
    textPane2.add(Box.createRigidArea(new Dimension(5, 0))); 
    textPane2.add(locationText); 
    textPane.setLayout(new BoxLayout(textPane, BoxLayout.Y_AXIS)); 
    textPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 2, 2)); 
    textPane.add(Box.createVerticalGlue()); 
    textPane.add(textPane1); 
    textPane.add(Box.createRigidArea(new Dimension(0, 5))); 
    textPane.add(textPane2); 
    JPanel contentPane = new JPanel(); 
    contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); 
    contentPane.add(scrollPane); 
    contentPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 2, 2)); 
    contentPane.add(Box.createVerticalGlue()); 
    contentPane.add(Box.createRigidArea(new Dimension(0, 5))); 
    contentPane.add(textPane); 
    JPanel pane = new JPanel(new BorderLayout()); 
    pane.setBorder(BorderFactory.createEmptyBorder(15, 0, 0, 0)); 
    pane.setBackground(Color.WHITE); 
    String[] dates = {"12/15/2016", "12/30/2016"}; 
    JList list; 
    list = new JList(dates); 
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
    JLabel label = new JLabel("Browsing Date"); 
    pane.add(label, BorderLayout.NORTH); 
    pane.add(list, BorderLayout.WEST); 
    pane.setPreferredSize(new Dimension(150, 380)); 
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pane, contentPane); 
    JMenuBar organize = new JMenuBar(); 
    organize.setOpaque(true); 
    organize.setBackground(getBackground()); 
    JMenu menu = new JMenu("Organize"); 
    menu.add(remove); 
    remove.setEnabled(false); 
    menu.setOpaque(true); 
    menu.setBackground(getBackground()); 
    menu.setIcon(new ImageIcon(Hello.class.getResource("/rsz_todo-512.png"))); 
    organize.add(menu); 
    JPanel finale = new JPanel(new BorderLayout()); 
    finale.setOpaque(true); 
    finale.add(organize,BorderLayout.NORTH); 
    finale.add(splitPane,BorderLayout.CENTER); 
    setOpaque(true); 
    add(finale); 
} 

私はこの白い領域を作成しているかを把握することはできません。私はこのセクションではかなり新しいです。誰でもそれを修正するために私を助けてくれる?私の愚かな質問のために私を許してください。前もって感謝します。

+3

1)すぐに役立つようにするには、[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 2) 'finale.add(organize、BorderLayout.NORTH);'なぜ 'setJMenuBar(..)'を使わないのですか? 3)すべての 'setBackground(..)'呼び出しは何ですか?これはPLAFで処理する必要があります。 –

+0

提案をいただきありがとうございます。私は完全なコードを今投稿しました – IAmBlake

+0

* "完全なコード" *これは絶対に提案したものではありません。 )。私がリンクを提供するときは、*それらを読んでください*。 –

答えて

2

しかし、私は私のコードを実行したときに、私は、メニューバー

finale.add(organize,BorderLayout.NORTH); 

の横に白い領域を取得し、フレームのコンテンツペインにメニューバーを追加しないでください。

JFrameには、メニューバー用に特別な場所が予約されています。

  1. 詳細および作業例については、メニューを使用する方法のSwingのチュートリアルからのセクションを読んで適切な方法に

  2. を見つけるために、JFrameのAPIをお読みください。

注Swingのチュートリアルから、実施例では、GUIコンポーネントがEvent Dispatch Thread (EDT)上で作成されるように、あなたがより良いあなたのコードを構築するのに役立ちます。

また、例のコードでさえも過剰ですが、コードはMCVEの形式になります。メニューバーに関する質問は、JFrame、JMenuBar、およびJMenuが必要とする問題を示すものです。

すべてのSwingの基本的な例については、このチュートリアルへのリンクを参考にしてください。

関連する問題