2013-11-08 2 views
2

Панель с именем JPanel отображается только как один маленький красный квадрат вверх по центру, я попытался установить размер, но он, похоже, не работает что-нибудь.Java - JPanel - это только один маленький пиксель в верхнем центре моего JFrame

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Draw extends JFrame{ 

private JPanel panel; 

    public Draw() { 
     super("title"); 
     setLayout(new FlowLayout());   
     panel = new JPanel();  
     panel.setBackground(Color.RED); 
     add(panel, BorderLayout.CENTER); 
    } 
} 

ответ

4

по умолчанию, предпочтительный размер JPanel является 0x0. FlowLayout выставляет компоненты на основе их предпочтительного размера, поэтому теперь компонент имеет предпочтительный размер 1x1 (граница линии добавляет небольшой вес).

Вы можете попробовать добавить еще один компонент к panel ...

panel.add(new JLabel("This is some text")); 

Или переопределить panel сек getPreferredSize метод ...

panel = new JPanel() { 
    public Dimension getPreferredSize() { 
     return new Dimension(100, 100); 
    } 
}; 
+0

быстрый ответ + 1, я всегда вижу, что вы в ответе swing.Looks как у вас есть какие-то 10-15 лет ехр в этой области – SpringLearner

+0

@javaBeginner Being кодирования Качели только после того, как она была введена в основной API в свинг 1,3 (около 1999 года). Все еще много, чтобы узнать хотя;) – MadProgrammer

+0

Любой опыт работы в javaFX? – SpringLearner

1

Попробуйте это:

Файл Draw.java

package com.stackovfl; 

    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.FlowLayout; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 

    @SuppressWarnings("serial") 
    class Draw extends JFrame { 
    private JPanel panel; 

     public Draw() { 
     super("title"); 
     setLayout(new FlowLayout()); 
     panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(200, 300)); 
     panel.setBackground(Color.RED);  
     add(panel, BorderLayout.CENTER); 
     /* Important to get the layout to work */ 
     pack();  
     /* Center the window */ 
     setLocationRelativeTo(null);   
     /* Important if you want to see your window :) */ 
     setVisible(true); 
     } 
    } 

Файл Test.java (основной способ запуска окна): package com.stackovfl;

import javax.swing.SwingUtilities; 

public class Test { 
public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Draw(); 
     } 
    }); 
    } 
} 
+0

Обратите внимание, что после метода pack() важно использовать setLocationRelativeTo (null). Это гарантирует, что ваши окна находятся в центре экрана. Если вы попробуете, наоборот, это не сработает, потому что метод pack может изменить размер вашего окна. –