java - 布局管理器的使用

标签 java swing layout-manager

我试图使用布局管理器创建一个简单的卡片显示程序,但我仍然没有掌握正确使用布局管理器的窍门。这是我的代码,它使用 BorderLayout(); 作为 contentPane 的布局管理器,GridLayout(); 作为buttonPanel,CardLayout(); 用于cardPanel,FlowLayout(); 用于labelPanel。

public class TestClass // implements ActionListener 
{
    static JPanel content = new JPanel(new BorderLayout());
    static JPanel cardPanel = new JPanel();
    static CardLayout cardLayout;
    static JPanel buttonPanel = new JPanel(new FlowLayout());
    static JPanel labelPanel = new JPanel(new GridLayout(9,1));
    static JButton jack, king, queen, ace;
    static JButton first, last, prev, next;

   public static void main(String[] args) {
        JFrame window = new JFrame("Window");

        //------Creates the Label Panel --//
        JLabel label = new JLabel("SELECT A CARD");
        label.setFont(new Font("Georgia",Font.BOLD,18));
        labelPanel.add(label, FlowLayout.LEFT);

        //-----Creates the Button Panel --//
        jack = new JButton("Jack");
        queen = new JButton("Queen");
        king = new JButton("King");
        ace = new JButton("Ace");
        first = new JButton("First");
        last = new JButton("Last");
        prev = new JButton("Previous");
        next = new JButton("Next");
        JLabel sep = new JLabel("-------");
        buttonPanel.add(jack);
        buttonPanel.add(queen);
        buttonPanel.add(king);
        buttonPanel.add(ace);
        buttonPanel.add(sep);
        buttonPanel.add(first);
        buttonPanel.add(last);
        buttonPanel.add(prev);
        buttonPanel.add(next);

        //-------Creates the cardPanel --//
        JLabel card1 = new JLabel("JACK");
        JLabel card2 = new JLabel("QUEEN");
        JLabel card3 = new JLabel("KING");
        JLabel card4 = new JLabel("ACE");
        cardPanel.add(card1, "jack");
        cardPanel.add(card2, "queen");
        cardPanel.add(card3, "king");
        cardPanel.add(card4, "ace");
        cardPanel.setLayout(cardLayout = new CardLayout());
        cardLayout.first(cardPanel);

        // ----- Adds the panels to the contentPane ---//
        content.add(labelPanel, BorderLayout.NORTH);
        content.add(buttonPanel, BorderLayout.WEST);
        content.add(cardPanel, BorderLayout.CENTER);

        window.setContentPane(content);
        window.setLocation(300,100);
        window.pack();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
        window.setResizable(true);
    }
}

但输出不符合预期。我希望标签位于左上角,按钮位于左侧(并使用网格布局),然后将cardLabel 置于中心。

已编辑:问题已解决,我犯了一个愚蠢的错误

    static JPanel buttonPanel = new JPanel(new GridLayout(9,1)); //previously FlowLayout
    static JPanel labelPanel = new JPanel(new FlowLayout()); //previously GridLayout

最佳答案

网格布局(labelPanel)中唯一的内容是:

JLabel label = new JLabel("SELECT A CARD");

其他所有内容都在buttonPanel中,这是一个流程布局。

看看这个:https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

关于java - 布局管理器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27288097/

相关文章:

java - 将 2 个 FlowLayouts 放在另一个 FlowLayouts 下,并留有边距

java - 添加使用面板作为子容器的方法

java - 阻止用户输入扩展文本字段

Java - 密码字段字符计数器

java - 无法调整 JButton 的大小

java - 从 JMenuItem 中删除

java - 将 Swing 组件添加到 PDF 文件

java - 字符替换方法

java - NetBeans 6.9 中的警告或信息框 : "x" is not a known variable in the current context

java - JLabel 未显示