Java 中的 JPanel 中的 JPanel
JPanel of JPanels in Java
我正在尝试在 Java 中开发 JPanel 的 JPanel
外部 JPanel 具有布局 FlowLayout.LEFT,内部 JPanel 具有布局 FlowLayout.LEADING
我在内部 jpanels 添加了一个标签
应该作为标签的列和行添加到外部面板
但这不起作用将标签作为一行添加到外部面板我的意思是所有
的左 FowLayout
我将标签存储在名为 board 的标签链表的链表中
这是填充标签链表的代码
for(int i =0 ; i <7 ;i++)
{
LinkedList<JLabel> list =new LinkedList<JLabel>();
for(int j=0 ; j< 5; j++)
{
JLabel lab = new JLabel();
lab.setIcon(add_icon);
lab.addMouseListener(listener);
lab.setTransferHandler(new TransferHandler("icon"));
list.add(lab);
}
board.add(list);
}
然后我将标签添加到名为容器的外部 jpanel
这是代码
container.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i =0 ; i < board.size() ;i++)
{
panel =new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEADING));
for(int j=0 ; j< board.get(i).size(); j++)
{
panel.add(board.get(i).get(j));
}
container.add(panel);
//
}
add(container);
validate();
repaint();
这是输出,似乎流式布局前导不起作用
我该怎么做?我应该怎么做才能将标签添加为行和列?
FlowLayout
无法垂直堆叠组件。请改用 BoxLayout
。试试下面的代码:
container.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i = 0; i < board.size(); i++){
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int j = 0; j < board.get(i).size(); j++)
panel.add(board.get(i).get(j));
container.add(panel);
}
add(container);
validate();
repaint();
我发现可以使用 GridBagLayout
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill=GridBagConstraints.HORIZONTAL;
for(int i =0 ; i < board.size() ;i++)
{
panel =new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c1 = new GridBagConstraints();
c1.fill=GridBagConstraints.VERTICAL;
c1.weighty=-.9;
// panel.setBounds(0, 0, 400, 300);
for(int j=0 ; j< board.get(i).size(); j++)
{
c1.gridx = j;
c1.gridy = 0;
c1.insets= new Insets(-5,0,0,-5);
panel.add(board.get(i).get(j),c1);
}
c.weightx =- 5;
c.gridx = 0;
c.gridy =i ;
c.insets=new Insets(-5,0,-5,0);
container.add(panel,c);
//
}
add(container);
validate();
repaint();
我正在尝试在 Java 中开发 JPanel 的 JPanel 外部 JPanel 具有布局 FlowLayout.LEFT,内部 JPanel 具有布局 FlowLayout.LEADING 我在内部 jpanels 添加了一个标签 应该作为标签的列和行添加到外部面板 但这不起作用将标签作为一行添加到外部面板我的意思是所有
的左 FowLayout我将标签存储在名为 board 的标签链表的链表中 这是填充标签链表的代码
for(int i =0 ; i <7 ;i++)
{
LinkedList<JLabel> list =new LinkedList<JLabel>();
for(int j=0 ; j< 5; j++)
{
JLabel lab = new JLabel();
lab.setIcon(add_icon);
lab.addMouseListener(listener);
lab.setTransferHandler(new TransferHandler("icon"));
list.add(lab);
}
board.add(list);
}
然后我将标签添加到名为容器的外部 jpanel
这是代码
container.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i =0 ; i < board.size() ;i++)
{
panel =new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEADING));
for(int j=0 ; j< board.get(i).size(); j++)
{
panel.add(board.get(i).get(j));
}
container.add(panel);
//
}
add(container);
validate();
repaint();
这是输出,似乎流式布局前导不起作用
我该怎么做?我应该怎么做才能将标签添加为行和列?
FlowLayout
无法垂直堆叠组件。请改用 BoxLayout
。试试下面的代码:
container.setLayout(new FlowLayout(FlowLayout.LEFT));
for(int i = 0; i < board.size(); i++){
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int j = 0; j < board.get(i).size(); j++)
panel.add(board.get(i).get(j));
container.add(panel);
}
add(container);
validate();
repaint();
我发现可以使用 GridBagLayout
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill=GridBagConstraints.HORIZONTAL;
for(int i =0 ; i < board.size() ;i++)
{
panel =new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c1 = new GridBagConstraints();
c1.fill=GridBagConstraints.VERTICAL;
c1.weighty=-.9;
// panel.setBounds(0, 0, 400, 300);
for(int j=0 ; j< board.get(i).size(); j++)
{
c1.gridx = j;
c1.gridy = 0;
c1.insets= new Insets(-5,0,0,-5);
panel.add(board.get(i).get(j),c1);
}
c.weightx =- 5;
c.gridx = 0;
c.gridy =i ;
c.insets=new Insets(-5,0,-5,0);
container.add(panel,c);
//
}
add(container);
validate();
repaint();