2017-01-30 5 views
0

現在、Javaプログラムで作業していて、何も表示しないプログラムで問題が発生しています。JFrameウィンドウが開くことを拒否する

WindowClient client = new WindowClient(); 
    client.pack(); 
    client.setVisible(true); 

そしてWindowClient::メインメソッド内

は、次のコードである

import javax.swing.JFrame; 
import java.awt.GridBagLayout; 
import javax.swing.SpringLayout; 

import org.datacontract.schemas._2004._07.NaturalDisasterService.NaturalDisaster; 
import org.tempuri.INaturalDisasterServiceProxy; 

import java.awt.BorderLayout; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import java.awt.Font; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.rmi.RemoteException; 
import java.awt.event.ActionEvent; 

public class WindowClient extends JFrame { 
    private INaturalDisasterServiceProxy ndsp; 
    private JTextField textDisasterName; // text box on insertPanel for disaster names 
    private JTextField textDisasterDescription; // text box on insertPanel for disaster descriptions 
    public JPanel insertPanel, detailPanel; 
    public JList list; // the list 
    public JLabel lblDisasterNameStaticInsert, //displays text "Disaster Name:" on insertPanel 
     lblDisasterDescStaticInsert, // displays text "Disaster Description:" on insertPanel 
     lblDisasterDescDataDetail, // displays disaster description from database on detailPanel 
     lblDisasterDescStaticDetail; // label displays text "Disaster Desc:" on detailPanel 
    public WindowClient() { 
    buildWindow(); 
    ndsp = new INaturalDisasterServiceProxy(); 
    ndsp.setEndpoint("url redacted"); 
    updateList(); 

    } 

    /** 
    * @param args 
    */ 

    public void getSelection() { 
    showDetailPanel(); 
    } 

    public void insertLoad() { 
    if (detailPanel.isVisible()) { 
     hideDetailPanel(); 
    } 
    showInsertPanel(); 
    } 

    public void saveToDB() { 
    hideInsertPanel(); 

    } 

    public void updateList() { 

    NaturalDisaster nds[]; 
    try { 
     nds = ndsp.getData(); 

     DefaultListModel model = new DefaultListModel(); 
     for(NaturalDisaster disaster : nds){ 
     model.addElement(disaster.getDisasterName()); 
     } 
     getContentPane().remove(list); 
     list = new JList(model); 
     list.setBounds(81, 11, 247, 132); 
     getContentPane().add(list); 
     getContentPane().repaint(); 
     getContentPane().revalidate(); 


    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     System.out.println(e.getMessage()); 
     //e.printStackTrace(); 
    } 

    } 

    public void buildWindow() { 
    getContentPane().setLayout(null); 

    list = new JList(); 
    list.setBounds(81, 11, 247, 132); 
    getContentPane().add(list); 

    insertPanel = new JPanel(); 
    insertPanel.setBounds(10, 150, 414, 67); 
    getContentPane().add(insertPanel); 
    insertPanel.setLayout(null); 

    detailPanel = new JPanel(); 
    detailPanel.setBounds(10, 150, 414, 67); 
    detailPanel.setLayout(null); 

    // Label for disaster names on insertPanel 
    lblDisasterNameStaticInsert = new JLabel("Disaster Name:"); 
    lblDisasterNameStaticInsert.setFont(new Font("Tahoma", Font.BOLD, 11)); 
    lblDisasterNameStaticInsert.setBounds(10, 5, 105, 14); 
    insertPanel.add(lblDisasterNameStaticInsert); 

    // label for disaster descripitons on the insertPanel 
    lblDisasterDescStaticInsert = new JLabel("Disaster Description:"); 
    lblDisasterDescStaticInsert.setFont(new Font("Tahoma", Font.BOLD, 11)); 
    lblDisasterDescStaticInsert.setBounds(10, 30, 120, 14); 
    insertPanel.add(lblDisasterDescStaticInsert); 

    // text boxes on the insertPanel 
    textDisasterName = new JTextField(); 
    textDisasterName.setBounds(138, 2, 266, 20); 
    insertPanel.add(textDisasterName); 
    textDisasterName.setColumns(10); 

    textDisasterDescription = new JTextField(); 
    textDisasterDescription.setBounds(138, 27, 266, 20); 
    insertPanel.add(textDisasterDescription); 
    textDisasterDescription.setColumns(10); 
    getContentPane().add(detailPanel); 

    // label for the disaster description from database on display panel 
    lblDisasterDescDataDetail = new JLabel("New label"); 
    lblDisasterDescDataDetail.setBounds(10, 30, 120, 14); 
    detailPanel.add(lblDisasterDescDataDetail); 

    // label displays text "Disaster Desc:" on display panel 
    lblDisasterDescStaticDetail = new JLabel("Disaster Desc:"); 
    lblDisasterDescStaticDetail.setBounds(10, 5, 105, 14); 
    detailPanel.add(lblDisasterDescStaticDetail); 

    JButton btnGetSelection = new JButton("Get Selection"); 
    btnGetSelection.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     getSelection(); 
     } 
    }); 
    btnGetSelection.setBounds(10, 228, 105, 23); 
    getContentPane().add(btnGetSelection); 

    JButton btnInsert = new JButton("Insert"); 
    btnInsert.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     insertLoad(); 
     } 
    }); 
    btnInsert.setBounds(125, 228, 124, 23); 
    getContentPane().add(btnInsert); 

    JButton btnSave = new JButton("Save Info to DB"); 
    btnSave.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     saveToDB(); 
     } 
    }); 

    btnSave.setBounds(259, 228, 165, 23); 
    getContentPane().add(btnSave); 
    //getContentPane().setVisible(true); 
    } 

    public void hideInsertPanel() { 
    getContentPane().remove(insertPanel); 
    insertPanel.setVisible(false); 
    } 

    public void showInsertPanel() { 
    getContentPane().add(insertPanel); 
    insertPanel.setVisible(true); 
    insertPanel.getParent().revalidate(); 
    } 

    public void hideDetailPanel() { 
    getContentPane().remove(detailPanel); 
    detailPanel.setVisible(false); 
    } 

    public void showDetailPanel() { 
    getContentPane().add(detailPanel); 
    detailPanel.setVisible(true); 
    detailPanel.getParent().revalidate(); 
    } 

} 

たJFrameの誤動作の問題に関する他の質問のいくつかに言及setVisible()pack()する必要がありますが、私はこれらの呼び出しの両方を行いました。唯一の結果は、プログラムが実行され、プログラムがWindowsのタスクバーで開かれますが、対応するウィンドウが表示されないことです(プレビューには、プログラムがアクティブとして選択されている場合は表示されない薄い白いバーが表示されます)。

最初の問題ではありませんが、これは数年後の最初のSwingの作業ですので、他の間違いを指摘してください。

+2

私は1)カスタムクラスをコメントアウトする2)発生した行をコメントアウトすることによって結果のコンパイルエラーを修正し、&3)メインコードをメインクラスとしてそのクラスに追加すると、 GUI。サイズを大きくドラッグすると、コンポーネントが表示されます。もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+2

BTW:Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 ** [この画像](https://i.stack.imgur.com/uKThv.png)から、テキスト領域が中央に配置されず、1つのボタンのテキストが切り捨てられることに注意してください。 *** –

+2

あなたのコンテンツがレイアウト管理APIを利用している場合にのみ 'pack'が動作するようになりました – MadProgrammer

答えて

1
getContentPane().setLayout(null); 

この行は、レイアウトマネージャを無効にしたことを意味します。 anyを使用しないので、コンテナのコンポーネントのサイズが自動的に変更されることはありません。そのため、何も表示されません。

あなたはこの行を変更した場合:

getContentPane().setLayout(new FlowLayout()); 

そして、あなたのJPanelオブジェクトのレイアウトをヌル他の呼び出しを削除するには、実行時に、あなたのコンポーネントが表示されます。

ここでは、それぞれのレイアウトマネージャの動作を簡単に説明しているguideです。

+0

ありがとう、これで修正されました。私は絶対レイアウトを使用しようとし、これは動作しないと仮定します。 –

関連する問題