2012-06-20 2 views
1

У меня возникли проблемы с добавлением компонентов внутри JPanels, в частности я добавляю JButton и JLabel, но они, похоже, не уважают размеры и местоположения, которые Я дал им.Компоненты в Jpanel не подчиняются размеру/позиции

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

public class test extends JFrame{ 
    private JPanel panel,panel2; 
    private JLabel insMatriz; 
    private JButton envMatriz; 

    public test(){ 
     super("Test"); 
     setLayout(new BorderLayout()); 
     getContentPane().setBackground(Color.red); 

     panel = new JPanel(); 
     add(panel,BorderLayout.WEST); 
     panel.setBackground(Color.blue); 

     panel2 = new JPanel(); 
     add(panel2,BorderLayout.EAST); 
     panel2.setBackground(Color.GRAY); 

     panel.setPreferredSize(new Dimension(330,300)); 
     panel2.setPreferredSize(new Dimension(330,300)); 


     insMatriz = new JLabel(); 
     panel.add(insMatriz); 
     insMatriz.setSize(new Dimension(50,10)); 
     insMatriz.setLocation(5,5); 
     insMatriz.setText("Insert:"); 

     envMatriz = new JButton(); 
     panel2.add(envMatriz); 
     envMatriz.setSize(new Dimension(100,50)); 
     envMatriz.setLocation(5,5); 
     envMatriz.setText("Submit"); 

     setSize(700,400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
} 

ответ

0

Думаю, вы должны вставить другую панель в основную панель. Затем вставьте этикетку во внутреннюю панель.

2

Это потому, что вы смешиваете абсолютный макет и LayoutManager. В Swing у вас есть два варианта, и вам нужно выбрать один из них для каждого компонента. Попытка сделать оба одновременно всегда заканчивается неприятностями:

  1. используется абсолютное расположение: это означает, что вы называете setLayout(null) на этот компонент, и вы ответственн для проклейки и позиционирования дочерних компонентов. Вы должны использовать setBounds/setSize-setPosition для размещения и размера дочерних компонентов.
  2. Вы используете LayoutManager (BorderLayout, FlowLayout, GridBagLayout и т. Д.), И вы оставляете расположение и размеры для LayoutManager. Чтобы указать, как вы хотите, чтобы это было выполнено, вы выбираете соответствующий LayoutManager, возможно, вы предоставите ограничения, и иногда вы можете (но это скорее исключение), необходимо заставить минимальный/максимальный/предпочтительный размер.

Я очень рекомендую использовать LayoutManager, поскольку это обеспечит более чистые компоненты, лучше кросс-платформенной опыт, уважением L & функции F и становится более сопровождаемым.

Смежные вопросы