Java JPanel没有';不显示在边框布局中
我有一个边框布局,右边有一个JPanel。JPanel具有绝对布局,它不包含任何内容,因为我使用它来绘制图形(覆盖paintComponent(graphics g)) 问题是面板没有显示(它在那里,但像1像素宽)。我试着在面板上调整尺寸。。但这不起作用 我该怎么做Java JPanel没有';不显示在边框布局中,java,swing,layout-manager,Java,Swing,Layout Manager,我有一个边框布局,右边有一个JPanel。JPanel具有绝对布局,它不包含任何内容,因为我使用它来绘制图形(覆盖paintComponent(graphics g)) 问题是面板没有显示(它在那里,但像1像素宽)。我试着在面板上调整尺寸。。但这不起作用 我该怎么做 frame = new JFrame(); frame.setBounds(100, 100, 450, 300); JPanel panelCenter = new JPanel(); panelRight = new Actor
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
JPanel panelCenter = new JPanel();
panelRight = new ActorDrawer();
frame.getContentPane().add(panelRight, BorderLayout.EAST);
panelRight.setSize(200, 400);
panelRight.setLayout(null);
frame.getContentPane().add(panelCenter, BorderLayout.CENTER);
frame.getContentPane().add(panelBottom, BorderLayout.SOUTH);
table = new JTable(new MyTableModel());
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
panelCenter.add(scrollPane);
BorderLayout尊重east构件的首选尺寸,并在必要时拉伸其高度。您是否尝试过设置面板的首选大小(或覆盖
getPreferredSize
方法以返回您喜欢的大小)?BorderLayout尊重east组件的首选大小,并在必要时拉伸其高度。您是否尝试过设置面板的首选大小(或覆盖getPreferredSize
方法以返回您喜欢的大小)?查看JPanel.setPreferredSize()方法。另外,我认为JFrame.setBounds()调用不是您想要的。下面是一个例子:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.BorderLayout;
public class Sandbox extends JFrame
{
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.RED);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
}
public static void main(String[] args)
{
Sandbox s = new Sandbox();
}
public Sandbox()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
MyPanel panelRight = new MyPanel();
panelRight.setPreferredSize(new Dimension(150, 300));
this.getContentPane().add(panelRight, BorderLayout.EAST);
JPanel panelCenter = new JPanel();
this.getContentPane().add(panelCenter, BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane(new JTable());
panelCenter.add(scrollPane);
JPanel panelBottom = new JPanel();
this.getContentPane().add(panelBottom, BorderLayout.SOUTH);
this.setSize(400, 400);
this.setVisible(true);
}
}
查看JPanel.setPreferredSize()方法。另外,我认为JFrame.setBounds()调用不是您想要的。下面是一个例子:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.BorderLayout;
public class Sandbox extends JFrame
{
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.RED);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
}
public static void main(String[] args)
{
Sandbox s = new Sandbox();
}
public Sandbox()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
MyPanel panelRight = new MyPanel();
panelRight.setPreferredSize(new Dimension(150, 300));
this.getContentPane().add(panelRight, BorderLayout.EAST);
JPanel panelCenter = new JPanel();
this.getContentPane().add(panelCenter, BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane(new JTable());
panelCenter.add(scrollPane);
JPanel panelBottom = new JPanel();
this.getContentPane().add(panelBottom, BorderLayout.SOUTH);
this.setSize(400, 400);
this.setVisible(true);
}
}
解决办法来了!!!我也在做同样的事情
JPanel panel = new JPanel();
JLabel strech_label = new JLabel("As long as you need , Dummy Text");
strech_label.setPreferredSize( new Dimension( 111, 0 ) );
panel.setLayout(new BorderLayout());
panel.add(new MyDraw(), BorderLayout.CENTER);
panel.add(strech_label, BorderLayout.SOUTH);
frame1.setLayout(new BorderLayout());
frame1.add(panel,BorderLayout.WEST);
因此,基本上,JLabel位于南部或北部,它将有力地拉伸MyDraw。解决方案来了!!!我也在做同样的事情
JPanel panel = new JPanel();
JLabel strech_label = new JLabel("As long as you need , Dummy Text");
strech_label.setPreferredSize( new Dimension( 111, 0 ) );
panel.setLayout(new BorderLayout());
panel.add(new MyDraw(), BorderLayout.CENTER);
panel.add(strech_label, BorderLayout.SOUTH);
frame1.setLayout(new BorderLayout());
frame1.add(panel,BorderLayout.WEST);
因此,基本上JLabel要么位于南部,要么位于北部,它将强制拉伸MyDraw。不要使用null布局,永远不要。不要使用null布局,永远不要。永远不要-永远不要调用任何setXXSize方法。相反,让组件返回合理的大小提示@kleopatra当使用一个没有孩子的JPanel并在其中直接绘画时,我相信你必须使用setXxxSize()…@jfpoilpret,这是一个很好的观点,尽管这是一个非常罕见的例外:大多数时候,一幅画也有一个“自然”大小。不会经常混淆我们的年轻同事:-)不-永远不要调用任何setXXSize方法。相反,让组件返回合理的大小提示@kleopatra当使用一个没有孩子的JPanel并在其中直接绘画时,我相信你必须使用setXxxSize()…@jfpoilpret,这是一个很好的观点,尽管这是一个非常罕见的例外:大多数时候,一幅画也有一个“自然”大小。不会经常让我们的年轻同事感到困惑:-)