2014-11-19 4 views
2

저는 Java를 통해 진행 중이며 모든 것을 결합하는 작은 '포괄적 인'프로젝트를 시작했습니다. 그리고 나는 거의 게이트에서 문제에 매달려 있습니다.Java Swing을 사용하여 표시 할 탭을 얻으려고합니다.

기본적으로 응용 프로그램은 현재 각각 다른 내용의 세 개의 탭으로 구성된 GUI를 열 것이라고 가정합니다. 하나는 테이블 탑 캠페인을 설계하기위한 것이고, 하나는 그것을 실행하기위한 것이고, 다른 하나는 데이터베이스 관리를위한 것입니다.

필자는 모든 구성 요소를 올바르게 추가했다고 생각했지만 테스트를 위해 실행할 때 비어있는 크기가 조정되지 않은 응용 프로그램 창이 나타납니다. 기본적으로 크기 조정 버튼과 라인 만 있습니다. 크기를 조정할 수는 있지만 메뉴 막대를 표시하더라도 창은없고 탭도없고 nuthin도 없습니다. 나는 그들을 한 번에 한 가지씩 보여주고 심지어 netbeans의 GUI 빌더에서 그것을 재건 및 생성 된 코드를 기반으로 리모델링 (나는 GUI를 수동으로 코드화하는 방법을 배우고 싶고 사용자 정의 컴포넌트를 가지고있다.) .

누구나 내가 잘못하고있는 것을 발견 할 수 있습니까?

package com.bmagus.tabletop.gui; 

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 

import javax.swing.DefaultComboBoxModel; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.WindowConstants; 


public class GMGui extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public GMGui() { 
     initComponents(); 
     lookAndFeel(); 
    } 

    //Component variables 
    private JCheckBox dbSearchMod1; 
    private JComboBox pcSelector; 
    private JComboBox npcSelector; 
    private JMenu fileMenu; 
    private JMenu editMenu; 
    private JMenu helpMenu; 
    private JMenuBar menuBar; 
    private JMenuItem fileExit; 
    private JPanel designPanel; 
    private JPanel runPanel; 
    private JPanel dbPanel; 
    private JScrollPane designNotesScroll; 
    private JScrollPane runNotesScroll; 
    private JTabbedPane gmGuiTabs; 
    private JTextArea designNotes; 
    private JTextArea runNotes; 
    private JTextField dbSearchField; 

    private void setGbc(GridBagConstraints localGbc, int x, int y, int height, int width, double xweight, double yweight){ 
     localGbc.gridx=x; 
     localGbc.gridy=y; 
     localGbc.gridheight=height; 
     localGbc.gridwidth=width; 
     localGbc.fill = GridBagConstraints.BOTH; 
     localGbc.weightx=xweight; 
     localGbc.weighty=yweight; 
     localGbc.insets = new Insets(20, 20, 20, 20); 
    } 
    private void lookAndFeel() 
    { 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(GMGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(GMGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(GMGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(GMGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
    } 
    private void initComponents() { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     GridBagLayout guiLayout = new GridBagLayout(); 
     gmGuiTabs = new JTabbedPane(); 
     designPanel = new JPanel(); 
     designNotesScroll = new JScrollPane(); 
     designNotes = new JTextArea(); 
     runPanel = new JPanel(); 
     runNotesScroll = new JScrollPane(); 
     runNotes = new JTextArea(); 
     pcSelector = new JComboBox(); 
     npcSelector = new JComboBox(); 
     dbPanel = new JPanel(); 
     dbSearchField = new JTextField(); 
     dbSearchMod1 = new JCheckBox(); 
     menuBar = new JMenuBar(); 
     fileMenu = new JMenu(); 
     fileExit = new JMenuItem(); 
     editMenu = new JMenu(); 
     helpMenu = new JMenu(); 

     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     //Campaign Design Tab 
     designPanel.setLayout(guiLayout); 

     designNotes.setColumns(20); 
     designNotes.setRows(5); 
     designNotesScroll.setViewportView(designNotes); 

     setGbc(gbc, 0,0,5,3,1.0d,1.0d); 

     gmGuiTabs.addTab("Campaign Design", designPanel); 

     //Run Game tab 
     runPanel.setLayout(guiLayout); 

     runNotes.setColumns(20); 
     runNotes.setRows(5); 
     runNotesScroll.setViewportView(runNotes); 

     setGbc(gbc, 0,0,5,3,1.0d,1.0d);//Todo 

     runPanel.add(runNotesScroll, gbc); 

     pcSelector.setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 
     setGbc(gbc,6,0,1,1,0.0d,0.0d);//Todo 
     runPanel.add(pcSelector, gbc); 

     npcSelector.setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 
     setGbc(gbc,0,1,1,1,0d,0d);//todo 
     runPanel.add(npcSelector, gbc); 

     gmGuiTabs.addTab("Run Game", runPanel); 

     //Database Tab 
     dbPanel.setLayout(guiLayout); 

     dbSearchField.setText("jTextField1"); 
     setGbc(gbc,0,0,3,1,0d,0d);//Todo 
     dbPanel.add(dbSearchField, gbc); 

     dbSearchMod1.setText("jCheckBox1"); 
     setGbc(gbc,1,0,1,1,0d,0d);//Todo 
     dbPanel.add(dbSearchMod1, gbc); 

     gmGuiTabs.addTab("Database", dbPanel); 

     //MenuBar Elements 
     fileMenu.setText("File"); 

     fileExit.setText("jMenuItem1"); 
     fileMenu.add(fileExit); 

     menuBar.add(fileMenu); 

     editMenu.setText("Edit"); 
     menuBar.add(editMenu); 

     helpMenu.setText("Help"); 
     menuBar.add(helpMenu); 

     setJMenuBar(menuBar); 
    }       
} 

나는이 방법이 기본 방법이라고 생각하지 않지만 여기서는 GUI를 호출하고 실행하는 방법을 설명합니다.

package com.bmagus.tabletop; 

import java.awt.EventQueue; 

import com.bmagus.tabletop.gui.GMGui; 

public class Game { 

    public static void main(String[] args){ 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run(){ 
       GMGui gmgui = new GMGui(); 
       gmgui.setVisible(true); 
      } 
     }); 
    } 

} 
+0

2 추측 : 1 : 확실히 보이도록 손으로 볼 수있게 설정하십시오. 2 : 구성 요소의 크기에 문제가있을 가능성이 큽니다. 얼마나 큰지를 알기 위해 배경색을 설정하십시오. –

답변

2

프레임에 아무 것도 추가하지 않습니다. 그러므로 당신은 빈 것을 얻습니다. 그래서 프레임에 전에 생성 된 컴포넌트를 추가 할 initComponents 방법의 끝 add 방법에서 호출이 예를 들어 당신의 탭 창을 보여줍니다

private void initComponents() 
{ 

    /* ... */ 

    setJMenuBar(menuBar); 
    add(gmGuiTabs); 
    pack(); 
} 

.

+0

그랬습니다. 와우. 따라서 모델을 만들려고했던 예제에는 마지막 함수가 포함되어 있지 않습니다. 항상 필요합니까, 아니면 GridBagLayout 때문입니까? 이제 일부 구성 요소가 누락되었습니다.하지만 실제로 어떻게 구성되어 있는지 실제로 볼 수있는 이유를 알 수 있습니다. 고맙습니다!! 편집 : pack() 메소드가 아니라 add() 메소드. – BrianMagus

+0

문제 없습니다. 예. 한 단계에서 사용하는 레이아웃에 관계없이 항상 프레임에 구성 요소 (프레임에 표시 할 구성 요소)를 추가해야합니다. 그렇지 않으면 아무 것도 표시되지 않습니다. 그리고 pack 메소드는 프레임 크기를 조절하는 것입니다. – BluesSolo

관련 문제