Java 按钮布局的Gui问题
我试图使用flow layout创建一个菜单屏幕,该屏幕以单列为方向,但每当我添加按钮时,它都会将其添加到一行Java 按钮布局的Gui问题,java,swing,user-interface,layout-manager,cardlayout,Java,Swing,User Interface,Layout Manager,Cardlayout,我试图使用flow layout创建一个菜单屏幕,该屏幕以单列为方向,但每当我添加按钮时,它都会将其添加到一行 import java.awt.CardLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.*; import java.awt.event.*; import javax.swing.*;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Proj
{
JPanel card1,card2;
ActionListener listener;
JFrame menu;
JFrame catagories;
JButton menu1,addOrTake,cata,payd,showd;
//JButton
public Proj(){
card2=new JPanel();
menu = new JFrame("Card Layout");
catagories = new JFrame();
//final Container contentPane = menu.getContentPane();
final CardLayout layout = new CardLayout();
menu.setLayout(layout);
card1=new JPanel();
menu1 = new JButton("");
menu1.setIcon(new ImageIcon("C:/Users/sabar/Menu.jpg"));
menu1.setSize(60,600);
menu1.setVisible(true);
addOrTake = new JButton();
addOrTake.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"));
cata = new JButton("");
cata.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"));
showd = new JButton("");
showd.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"));
payd = new JButton("");
payd.setSize(60, 600);
payd.setIcon(new ImageIcon("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"));
payd.setVisible(true);
card1.add(menu1);
card1.add(addOrTake);
card1.add(cata);
card1.add(showd);
card1.add(payd);
menu1.addActionListener(listener);
addOrTake.addActionListener(listener);
cata.addActionListener(listener);
showd.addActionListener(listener);
payd.addActionListener(listener);
listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {}};
// TODO Auto-generated method stub
menu.setSize(60, 600);
menu.setVisible(true);
JButton poo=new JButton("Poo");
poo.setSize(60,600);
card2.add((poo));
card2.add(new JButton("Pee"));
card2.add(new JButton("Per"));
card2.add(new JButton("POt"));
card2.setVisible(false);
menu.add(card2);
menu.add(card1);
catagories.pack();
menu.pack();
card1.setVisible(false);
}
public static void main(String[]args)
{
Proj poop =new Proj();
}
}
问题:
- 您正在将组件添加到菜单,CardLayout使用容器,而不使用第二个参数字符串常量。没有这一点,可能很难轻松交换“卡”(组件)
- 如果您想要一个单列类型的布局,您需要使用一个允许这种布局的布局管理器,而JPanel的默认布局不是它。更好的选择:
- GridLayout(0,1)用于可变行数,一列
- BoxLayout(容器,BoxLayout.页面_轴)
- GridBagLayout具有右GridBagConstraint gridx和gridy属性
- 您正在将组件添加到菜单,CardLayout使用容器,而不使用第二个参数字符串常量。没有这一点,可能很难轻松交换“卡”(组件)
- 如果您想要一个单列类型的布局,您需要使用一个允许这种布局的布局管理器,而JPanel的默认布局不是它。更好的选择:
- GridLayout(0,1)用于可变行数,一列
- BoxLayout(容器,BoxLayout.页面_轴)
- GridBagLayout具有右GridBagConstraint gridx和gridy属性
我还想更详细地了解一下它的工作原理,因为您使用它是错误的首先使用一个布局管理器,它能够获得您的结果 首先看一看,并获得一些想法
我还想进一步了解它的工作原理,因为你用错了可能使用
GridBagLayout
instead可能使用GridBagLayout
instead我对java相当陌生。可以同时进行cardlayout和gridlayout吗?我需要在菜单屏幕之间切换。@KenM:当然可以。只需在一个“card”JPanel中使用GridLayout,并使用JPanel将其添加到CardLayout中。但是您的问题和代码告诉我们,您根本没有阅读布局管理器教程,您想先阅读。@KenM每个布局将负责一个单独的容器,因此,CardLayout
将负责card1
和card2
组件,而GridBagLayout
将负责按钮。我对java相当陌生。可以同时进行cardlayout和gridlayout吗?我需要在菜单屏幕之间切换。@KenM:当然可以。只需在一个“card”JPanel中使用GridLayout,并使用JPanel将其添加到CardLayout中。但是您的问题和代码告诉我们,您根本没有阅读布局管理器教程,您想先阅读。@KenM每个布局将负责一个单独的容器,因此,cardblayout
将负责card1
和card2
组件,GridBagLayout
将负责按钮谢谢,这非常有用。我在路上修理它:谢谢,这真的很有用。我在路上修理它:
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Proj {
JPanel card1, card2;
ActionListener listener;
JButton menu1, addOrTake, cata, payd, showd;
//JButton
JFrame menu;
public Proj() {
menu = new JFrame("Card Layout");
//final Container contentPane = menu.getContentPane();
final CardLayout layout = new CardLayout();
menu.setLayout(layout);
card1 = new JPanel(new GridBagLayout());
card2 = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
menu1 = new JButton("Mneu");
menu1.setVisible(true);
addOrTake = new JButton("Add or take");
cata = new JButton("Cata");
showd = new JButton("ShowD");
payd = new JButton("payd");
card1.add(menu1, gbc);
card1.add(addOrTake, gbc);
card1.add(cata, gbc);
card1.add(showd, gbc);
card1.add(payd, gbc);
menu1.addActionListener(listener);
addOrTake.addActionListener(listener);
cata.addActionListener(listener);
showd.addActionListener(listener);
payd.addActionListener(listener);
listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
}
};
// TODO Auto-generated method stub
JButton poo = new JButton("Poo");
card2.add((poo), gbc);
card2.add(new JButton("Pee"), gbc);
card2.add(new JButton("Per"), gbc);
card2.add(new JButton("POt"), gbc);
menu.add(card2, "Card2");
menu.add(card1, "Card1");
layout.show(menu.getContentPane(), "Card1");
menu.pack();
menu.setLocationRelativeTo(null);
menu.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
Proj poop = new Proj();
}
});
}
}