2013-02-19 2 views
8

CSE 205(Javaプログラミング2)クラスでは、本当にシンプルなGUIアプレットを設計する必要があります。私はSwingをよく知っていて、前に自分のプロジェクトのいくつかに使っていました。私はいくつかの問題にプログラムを設計してきた、とEclipseから実行するときには、自分のコンピュータ上で完璧に見える:ブラウザで実行したときにUIがフォーマットを失うのはなぜですか(Java Swing)?

enter image description here

しかし、私はそれをオンラインで提出するようになったとき、それはブラウザで実行ところ、UIが厳しくなります認知症、デフォルトに戻っ:

enter image description here

私が原因それはシンプルだしGridBagLayoutの使用に慣れてきました。それが私がここで使っているものです。クラスCreatePanelとSelectPanel(最初の画像にあるように)はJPanelを継承しています(私の教授によると)。誰もが起こっているかもしれないものの任意のアイデアを持っている

//Call the method addItem() to add the create button to the panel 
addItem(this, createB,0,2,2,1,defaultInset,GridBagConstraints.CENTER); 



//------- 
    public void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int[] inset, int align) 
     { 
      GridBagConstraints gc = new GridBagConstraints(); 
      gc.gridx = x; 
      gc.gridy = y; 
      gc.gridwidth = width; 
      gc.gridheight = height; 
      gc.weightx = 0; 
      gc.weighty = 0; 
      gc.insets = new Insets(inset[0],inset[1],inset[2],inset[3]); 
      gc.anchor = align; 
      gc.fill = GridBagConstraints.NONE; 
      p.add(c, gc); 
     } 

:によって

this.setLayout(new GridBagLayout()); 

そして、それぞれのコンポーネントを:私が使用して、各セット?私の時間の半分以上がレイアウトの見栄えに費やされていたことを考えれば、簡単な修正が大好きです。必要に応じてさらにコードを投稿することができます。ご意見ありがとうございます。

--EDIT--

さてさて、私は、@ MadProgrammerの提案に基づいて遊んのビットをやりました。私は問題がどこにあるかを絞り込んだと思う。

これは私が「ペットの種類を入力します。ラベルの右側にJTextFieldのサイズを設定するために使用していたコードです:設定のように、今、私は何か他のものにコードを変更した場合

petTypeTF = new JTextField(""); 
petTypeTF.setPreferredSize(new Dimension(125, 60)); 

列数:

petTypeTF = new JTextField("",12); 
petTypeTF.setPreferredSize(new Dimension(125, 60)); 

私はそれをオンラインで提出したときに1と同じに見えるUIを取得する列の数を設定すると何かがそれを台無しにしているようだ、これがためにそれを絞り込む助けるん。誰ですか?

+0

多くの理由があります。私はフィールドが既定の列(およびテキスト領域の場合は行)で作成されていないと思います。タブにペインを配置するために使用されているレイアウトマネージャーかもしれません... – MadProgrammer

+0

私はそれのようなものを恐れていました。私が試してみるかもしれない提案がありますか? – rphello101

+0

例を扱うのは難しいですが、テキストコンポーネントが列/行の値で作成されていることを確認してください。 'BorderLayout'を使用してコンポーネントをタブに配置し、テキスト領域 – MadProgrammer

答えて

9

問題の完全な延長を確認するコードは実際にはありませんが、いくつかのアイデアが役立つかもしれません。

GridBagLayoutは、可能であれば、好ましいサイズに基づいてレイアウトするコンポーネントを試してみたいと思うでしょう。それができない場合は、代わりに最小のサイズを見ます。

列(テキストエリアの場合はテキスト行)の行を含むテキストコンポーネントを作成していることを確認してください。これにより、いくつかの重要な要素に基づいてコンポーネントの適切なサイズが自動的に設定されます。

enter image description here

public class BadLayout11 { 

    public static void main(String[] args) { 
     new BadLayout11(); 
    } 

    public BadLayout11() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception ex) { 
       } 

       JTabbedPane pane = new JTabbedPane(); 
       pane.add("Pet List Creation", new TestPane()); 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(pane); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 

      setLayout(new GridBagLayout()); 

      JPanel fields = new JPanel(new GridBagLayout()); 

      JTextField field = new JTextField(12); 
      JTextArea area = new JTextArea(10, 20); 
      JLabel label = new JLabel("Enter a Pet Type"); 
      JButton button = new JButton("Create a Pet"); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.insets = new Insets(2, 2, 2, 2); 
      gbc.anchor = GridBagConstraints.WEST; 

      fields.add(label, gbc); 
      gbc.weightx = 1; 
      gbc.gridx++; 
      fields.add(field, gbc); 

      gbc.fill = GridBagConstraints.NONE; 
      gbc.gridx = 0; 
      gbc.weightx = 0; 
      gbc.gridy++; 
      gbc.gridwidth = 2; 
      gbc.anchor = GridBagConstraints.CENTER; 
      fields.add(button, gbc); 

      gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.insets = new Insets(2, 2, 2, 2); 
      gbc.gridheight = GridBagConstraints.REMAINDER; 
      gbc.weightx = 1; 
      gbc.weighty = 1; 
      gbc.fill = GridBagConstraints.BOTH; 
      add(fields, gbc); 
      gbc.gridx++; 
      add(new JScrollPane(area), gbc); 

     } 

    } 

} 

残念ながら、いくつかの点で、すべてのものは、レイアウトを維持するために、物事が崩壊または単にクリッピング表示されますいずれか単に不可能であることをポイントに到達します。

これらのケースでは、コンテナ全体をJScrollPaneに入れることができますが、このケースでは最悪のケースが考えられます。

+0

+1の制約をより適切に重み付けして、テキストフィールドの作成時にカラムを指定し、最小サイズを使用してGrigBagLayoutについて指定しました。 – camickr

+0

+1 GridBagLayoutとLayoutManagerの優れた分析。 –

関連する問題