Java 如何在一个框架中添加两个布局不同的面板?
我有一个面板带有gridBagLayout,第二个面板带有null gridBagLayout。当我将其添加到主面板,并且主面板到框架时,一个面板将消失。为什么呢?如何在一个框架中添加两个具有不同布局设置的面板 以下是@Beowolve的主要代码:Java 如何在一个框架中添加两个布局不同的面板?,java,swing,jframe,layout-manager,gridbaglayout,Java,Swing,Jframe,Layout Manager,Gridbaglayout,我有一个面板带有gridBagLayout,第二个面板带有null gridBagLayout。当我将其添加到主面板,并且主面板到框架时,一个面板将消失。为什么呢?如何在一个框架中添加两个具有不同布局设置的面板 以下是@Beowolve的主要代码: import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PrikazGUI {
JFrame frejm;
JPanel k;
JButton b1,b2;
public PrikazGUI(){
frejm = new JFrame("Lala");
k = new JPanel();
KvadratPravi p = new KvadratPravi();
JPanel grid = new JPanel();
grid.setLayout(new GridBagLayout());
grid.add(p);
// Kvadrat l = new Kvadrat();
JosJedanKvadrat jos = new JosJedanKvadrat();
// k.setLayout(null);
// k.setBounds(0, 444,444, 445);
k.add(jos);
k.add(grid);
JPanel main = new JPanel();
main.setLayout(null);
k.setBounds(0, 0,1000, 1900);
main.setBounds(0, 0,1000, 1900);
main.add(k);
frejm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frejm.setSize(1900, 1000);
frejm.getContentPane().add(main);
// frejm.getContentPane().add(k);
// frejm.pack();
frejm.setVisible(true);
}
public static void main(String[] args) {
PrikazGUI a = new PrikazGUI();
}
}
二等舱:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JPanel;
public class KvadratPravi extends JPanel {
int sizeH = 60;
int sizeW = 60;
public GridBagConstraints cst = new GridBagConstraints();
public KvadratPravi() {
JPanel j = new JPanel();
j.setLayout(new GridBagLayout());
cst.gridx = 0;
cst.gridy = 0;
add(j,cst);
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
g.setColor(Color.PINK);
g.drawRect(0, 0, sizeH, sizeW);
g.fillRect(0, 0, sizeH, sizeW);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(sizeH,sizeW);
}
}
三等舱:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;
public class JosJedanKvadrat extends JPanel {
int sizeH = 60;
int sizeW = 60;
int x,y;
public JosJedanKvadrat() {
setBounds(33, 44,444, 445);
JPanel j = new JPanel();
setLayout(null);
add(j);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(!e.isMetaDown()){
x = e.getX();
y = e.getY();
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if(!e.isMetaDown()){
Point p = getLocation();
setLocation(p.x + e.getX() - x,
p.y + e.getY() - y);
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawOval(0, 0, sizeH, sizeW);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(sizeH,sizeW);
}
}
第二类是在面板的中心,有gridBagLayout,第三类是在物体周围移动,因此,该类没有gridlayout…当我和主窗格中的两个面板时,第二个类的gridBagLayout似乎不起作用。您当前正在将两个
JPanel
添加到JFrame
中
JFrame f = new JFrame();
默认情况下,此框架使用。因此,如果调用
f.add(newpanel())代码>多次只有最后一个将可见,因为此布局的中心
区域只能显示一个JComponent
。您需要使用不同的布局。请添加小样本代码以显示您的问题。您对问题的解释不是很清楚。@Beowolve这里是代码:)不要使用空布局。Swing设计用于布局管理器。此外,无论何时进行自定义绘制,都需要覆盖组件的getPreferredSize()
方法,以便布局管理器知道组件的所需大小。不要硬编码框架的大小。pack()方法将根据添加到框架中的组件的首选大小调整框架的大小。您需要使用不同的布局。
-或者将第二个组件添加到BorderLayout的不同区域。例如add(component,BorderLayout.PAGE_END)
@camickr我更喜欢使用其他布局,因为我不确定这些面板的内容。我更喜欢看到边框布局来设置边框内容:菜单、页脚、页眉。但我应该提到这一点。其实已经不重要了