2017-01-26 5 views
0

によってFacebookのポストのようなカードビューを作成したい私は以下のコードでJPanelの配列を使用して、カードビューを作成したいが、それは、コードを動作していないようです。は、Java JPanelの配列

これは、Aと同じになりますfacebook post web私はguiでそれを作りたかった

あなたはまた、私に大きな助けになる同じ操作を実行するための他のテクニックを提案するかもしれません。

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JScrollPane; 

public class test extends JFrame { 

    private JPanel contentPane; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        test frame = new test(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

public test() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 587, 391); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 


    JPanel[] pan = new JPanel[5]; 
    int j= 0; 
    for(int i= 0;i<5;i++) 
    { 
     pan[i].setBounds(28, 22+j, 522, 149); 
     contentPane.add(pan[i]); 
     pan[i].setVisible(true);  
     j= j+160; 

    } 


} 
} 

エラー

at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+1

'contentPane.setLayout(ヌル)あなたのパネルを初期化する必要があります;'と 'パン[i]を.setBounds(28、22 + J 、522、149); 'あなたのGUIは遅かれ早かれ、Swingは[レイアウトマネージャ](https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)、ピクセルパーフェクトGUIは幻想であり、SwingはさまざまなPLAF、OS、画面サイズと解像度で動作しなければならない将来のヌルレイアウトの使用に関連する問題を解決しようとする問題を解決し、それらを解決しようとすると多くのトラブルや頭痛を与えるでしょう... – Frakcool

+2

... [Nullレイアウトは悪です](http:// www .leepoint.net/GUI/layouts/nulllayout.html)と[なぜSwingでnullレイアウトを使用するのが嫌なのですか?](http://stackoverflow.com/questions/6592468/why-is-it-frowned-使用中のヌル・レイアウト・イン・スイング)。また、 'JFrame'から拡張するべきではありません。[この質問](http://stackoverflow.com/questions/41252329/java-swing-using-extends-jframe-vs-calling-it-inside-of-クラス)とその答えがあまりにも多い – Frakcool

+1

ヌルレイアウトを避けるため、ピクセルの完全なレイアウトは現代のUIデザイン内の錯覚です。コンポーネントの個々のサイズに影響する要因は多すぎますが、いずれも制御できません。スイングはコアのレイアウトマネージャーと連携するように設計されており、これらを破棄することで問題や問題の終わりがなくなります。 – MadProgrammer

答えて

1

あなたは

for(int i= 0;i<5;i++) 
{ 
    pan[i] = new JPanel(); // this line missing 
    pan[i].setBounds(28, 22+j, 522, 149); 
    contentPane.add(pan[i]); 
    pan[i].setVisible(true); // not required 
    pan[i].setBorder(new LineBorder(Color.BLACK)); // to see bounds of your panels 
    j= j+160; 
} 
+0

ありがとうございました。 –

+0

Sir、正常に動作していますが、スクロール可能にするのに問題があります。 –

+0

'contentPane'の周りに' JScrollPane'を使用してください。 'setContentPane(new JScrollPane(contentPane));'。それがうまくいかないときは、あなたの 'contentPane'のためにレイアウトマネージャを使います。 –