0

私はこれに問題がありました:

public class Sales extends JPanel{
    ArrayList<JPanel> panes;
    ArrayList<String> tabs;
    JTabbedPane tp;
    public Sales(Dimension d){
        setSize(d);
        setLayout(null);
        tp = new JTabbedPane();
        Font f = new Font("Arial",Font.PLAIN,32);
        tp.setFont(f);
        for(Menu menu : FileManager.menus){
            JPanel tmp = new JPanel();
            /*int s = (int) Math.ceil(Math.sqrt(menu.products.size()));
            tmp.setLayout(new GridLayout(s,s));
            System.out.println("size" + s);
            for(Product p : menu.products){
                p.setFont(f);
                tmp.add(p);
            }*/
            tp.addTab(menu.name,null,tmp,"What is this?");
        }
        tp.setBounds(0,0,getWidth(),getHeight());
        add(tp);
    }
}

単純なJFrameにSalesが追加された場合:

public Main(){
        super("HoboGames Pos System");
        setUndecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this);
        sale = new Sales(getSize());
        add(sale);
    }

クリックなどでウィンドウが更新されるまでコンポーネントがペイントされないことを除いて、すべてが機能します。つまり、クリックするまでは空白の画面になります(申し訳ありませんが、全画面表示にするなどの方法で角を切りました...)

4

1 に答える 1

2

コンポーネントの追加が完了する前にウィンドウを表示したため、これらは更新されません。

次のようなものを試してください...

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this);
sale = new Sales(getSize());
add(sale);
setVisible(true);

revalidateまたは、コンポーネントの追加が完了した後でフレームに電話をかけることもできますがrepaint、正直なところ、最初の方法の方が簡単です。

サイドノート

コンポーネントでの使用は強くお勧めしません。コンポーネントのサイズを決定するsetSize場合など、適切なレイアウトを管理する必要があります。BorderLayout

于 2013-02-20T23:51:16.883 に答える