首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从框架的左侧做一条垂直的按钮?

如何从框架的左侧做一条垂直的按钮?
EN

Stack Overflow用户
提问于 2018-10-19 01:34:59
回答 3查看 1.4K关注 0票数 1

一种框架,其包括面板,其中按钮位于框架左侧的列中:

我试图用真正的Java代码制作这张图片,但失败了。

我找不到这个问题的正确解决方案...

代码语言:javascript
复制
    BorderLayout borderLayout = new BorderLayout();
    GridBagLayout gridBagLayout = new GridBagLayout();
    GridLayout gridLayout = new GridLayout();
    CardLayout cardLayout = new CardLayout();
    JPanel panelMain = new JPanel();
    JPanel panelLeft = new JPanel();
    JPanel panelInnerLeft = new JPanel();
    JPanel panelRight = new JPanel();

    panelMain.setLayout(borderLayout);
    panelLeft.setLayout(gridBagLayout);
    panelInnerLeft.setLayout(gridLayout);
    panelRight.setLayout(cardLayout);

    button1 = new JButton("Button 1");
    button2 = new JButton("Button 2");
    button3 = new JButton("Button 3");
    button4 = new JButton("Button 4");

    panelInnerLeft.add(button1,gridLayout);
    panelInnerLeft.add(button2,gridLayout);
    panelInnerLeft.add(button3,gridLayout);
    panelInnerLeft.add(button4,gridLayout);

    panelLeft.add(panelInnerLeft);
    panelMain.add(panelLeft);
    panelMain.add(panelRight);
    add(panelMain);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-19 06:49:27

这正是用来制作that screenshot的代码。

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class CompoundLayout01 {

    private JComponent ui = null;

    CompoundLayout01() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new BorderLayout(4,4));
        ui.setBorder(new TitledBorder("BorderLayout"));

        CardLayout cardLayout = new CardLayout();
        JPanel cards = new JPanel(cardLayout);
        cards.setBorder(new TitledBorder("CardLayout"));
        ui.add(cards);

        JPanel lineStart = new JPanel(new GridBagLayout());
        lineStart.setBorder(new TitledBorder("GridBagLayout"));
        // will appear on the left, in a LTR text orientation locale
        ui.add(lineStart, BorderLayout.LINE_START);

        JPanel buttonsCentered = new JPanel(new GridLayout(0, 1, 10, 10));
        buttonsCentered.setBorder(new TitledBorder("GridLayout"));
        // as single component added w/no constraint, will be centered
        lineStart.add(buttonsCentered); 
        for (int ii=1; ii<5; ii++) {
            JButton b = new JButton("Button " + ii);
            buttonsCentered.add(b);
        }
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                CompoundLayout01 o = new CompoundLayout01();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-10-19 02:02:58

代码语言:javascript
复制
panelMain.setLayout(borderLayout);
...
panelMain.add(panelLeft);
panelMain.add(panelRight);

阅读Layout Managers上的Swing教程。

它将向您展示如何使用BorderLayout

您需要在添加每个组件时指定“约束”。例如BorderLayout.LINE_STARTBorderLayout.CENTER

下面的内容也是错误的:

代码语言:javascript
复制
panelInnerLeft.setLayout(gridLayout);
...
panelInnerLeft.add(button1,gridLayout);
panelInnerLeft.add(button2,gridLayout);
panelInnerLeft.add(button3,gridLayout);
panelInnerLeft.add(button4,gridLayout);

请阅读GridLayout上的部分。GridLayout不需要约束。

票数 0
EN

Stack Overflow用户

发布于 2018-10-19 02:19:04

我不知道你是否需要一些特定的布局,但是如果你想要更多的控制,你可以看看我的例子。请注意,我必须自己处理一些尺寸。此外,如果你需要更多的控制,你可以随时使用null作为布局。

代码语言:javascript
复制
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.SwingUtilities;

public class NewJFrame extends javax.swing.JFrame {
    private JPanel jPanel1;
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    private JPanel jPanel2;
    private JButton jButton4;
    private JPanel ButtonsPanel;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                NewJFrame inst = new NewJFrame();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    public NewJFrame() {
        super();
        initGUI();
    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

            jPanel1 = new JPanel();
            getContentPane().add(jPanel1, BorderLayout.CENTER);
            jPanel1.setLayout(null);

            ButtonsPanel = new JPanel();
            FlowLayout ButtonsPanelLayout = new FlowLayout();
            jPanel1.add(ButtonsPanel);
            ButtonsPanel.setLayout(ButtonsPanelLayout);
            ButtonsPanel.setBounds(12, 23, 104, 215);
            ButtonsPanel.setBorder(
            BorderFactory.createEtchedBorder(BevelBorder.LOWERED));

            jButton1 = new JButton();
            ButtonsPanel.add(jButton1);
            jButton1.setText("jButton1");
            jButton1.setPreferredSize(new java.awt.Dimension(85, 23));

            jButton2 = new JButton();
            ButtonsPanel.add(jButton2);
            jButton2.setText("jButton2");
            jButton2.setPreferredSize(new java.awt.Dimension(85, 23));

            jButton3 = new JButton();
            ButtonsPanel.add(jButton3);
            jButton3.setText("jButton3");
            jButton3.setPreferredSize(new java.awt.Dimension(85, 23));

            jButton4 = new JButton();
            ButtonsPanel.add(jButton4);
            jButton4.setText("jButton4");
            jButton4.setPreferredSize(new java.awt.Dimension(85, 23));

            jPanel2 = new JPanel();
            jPanel1.add(jPanel2);
            jPanel2.setLayout(null);
            jPanel2.setBounds(122, 23, 250, 215);
            jPanel2.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));

            pack();
            setSize(400, 300);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52879606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档