現在、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の作業ですので、他の間違いを指摘してください。
私は1)カスタムクラスをコメントアウトする2)発生した行をコメントアウトすることによって結果のコンパイルエラーを修正し、&3)メインコードをメインクラスとしてそのクラスに追加すると、 GUI。サイズを大きくドラッグすると、コンポーネントが表示されます。もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –
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つのボタンのテキストが切り捨てられることに注意してください。 *** –
あなたのコンテンツがレイアウト管理APIを利用している場合にのみ 'pack'が動作するようになりました – MadProgrammer