Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane内一个接一个按钮的列表_Java_Swing_User Interface_Jscrollpane_Gridbaglayout - Fatal编程技术网

Java JScrollPane内一个接一个按钮的列表

Java JScrollPane内一个接一个按钮的列表,java,swing,user-interface,jscrollpane,gridbaglayout,Java,Swing,User Interface,Jscrollpane,Gridbaglayout,我想使用Swing在JScrollPane中列出JButton(具有固定尺寸,一个接一个)。我的想法是使用GridBagLayout创建JPanel,并在其适配行中添加按钮,然后使用该JPanel创建JScrollPane。当按钮数量较大时,这看起来很好,但当按钮数量为2或3时,我无法将一个按钮对齐到另一个按钮的正下方。 另外,稍后我将添加添加新按钮的选项(因此是+号) 代码(创建上东面板) private JPanel createLayerPanel(){ JPanel layerP

我想使用Swing在JScrollPane中列出JButton(具有固定尺寸,一个接一个)。我的想法是使用GridBagLayout创建JPanel,并在其适配行中添加按钮,然后使用该JPanel创建JScrollPane。当按钮数量较大时,这看起来很好,但当按钮数量为2或3时,我无法将一个按钮对齐到另一个按钮的正下方。 另外,稍后我将添加添加新按钮的选项(因此是+号)

  • 代码(创建上东面板)
  • private JPanel createLayerPanel(){
    JPanel layerPanel=newjpanel(newgridbaglayout());
    GridBagConstraints c=新的GridBagConstraints();
    //标签------------------------------------------------
    JLabel layersLabel=新的JLabel(“按钮”);
    LayerLabel.setHorizontalAlignment(SwingConstants.CENTER);
    layersLabel.setFont(默认字体);
    //LayerLabel.setBorder(新线条边框(颜色为红色,3));
    LayerLabel.setBackground(新颜色(0x22222));
    LayerLabel.setForeground(新颜色(0xFFFFFF));
    layersLabel.set不透明(true);
    c、 gridx=c.gridy=0;
    c、 ipadx=180;
    c、 权重x=1;
    c、 fill=GridBagConstraints.BOTH;
    layerPanel.add(LayerLabel,c);
    //钮扣------------------------------------------------
    JButton newLayerBtn=新JButton(“+”);
    newLayerBtn.setFont(新字体(Font.SANS_SERIF,Font.PLAIN,18));
    新图层背景(新颜色(0x22222));
    newLayerBtn.setForeground(颜色:白色);
    newLayerBtn.setFocusable(假);
    c、 gridx=1;
    c、 gridy=0;
    c、 ipadx=0;
    c、 权重x=0;
    layerPanel.add(新LAYERBTN,c);
    //滚动窗格------------------------------------------------
    //------------------------------------------------------------
    //------------------------------------------------------------
    JPanel layerListPanel=newjpanel(newgridbaglayout());
    层板立根(颜色:黑色);
    GridBagConstraints gbc=新的GridBagConstraints();
    gbc.fill=GridBagConstraints.HORIZONTAL;
    gbc.weightx=1.0;
    gbc.weighty=1;
    gbc.ipady=40;
    gbc.gridx=0;
    gbc.anchor=gridbag.NORTH;
    对于(gbc.gridy=0;gbc.gridy<10;gbc.gridy++){
    JButton btn=新JButton(“按钮”+gbc.gridy);
    layerListPanel.add(btn、gbc);
    }
    JScrollPane js=新的JScrollPane(layerListPanel);
    js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HorizontalScrollBar\uNever);
    // ...
    c、 gridx=0;
    c、 gridy=1;
    c、 网格宽度=2;
    c、 权重=1;
    c、 fill=GridBagConstraints.BOTH;
    layerPanel.add(js,c);
    返回层面板;
    }
    
    您确实需要GridBagLayout吗? 我只是用一个简单的盒子做了一个演示。 请看一看

    import java.awt.*;
    导入java.awt.event.*;
    导入javax.swing.*;
    公共类YY扩展JFrame{
    静态字符串[]args;
    公共YY(){
    设置大小(160200);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setLocationRelativeTo(空);
    inticnt=args.length==0?5:Integer.parseInt(args[0]);
    Box=Box.createVerticalBox();
    
    对于(inti=1;i您绝对需要GridBagLayout吗? 我只是用一个简单的盒子做了一个演示。 请看一看

    import java.awt.*;
    导入java.awt.event.*;
    导入javax.swing.*;
    公共类YY扩展JFrame{
    静态字符串[]args;
    公共YY(){
    设置大小(160200);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setLocationRelativeTo(空);
    inticnt=args.length==0?5:Integer.parseInt(args[0]);
    Box=Box.createVerticalBox();
    
    对于(int i=1;i下面的代码最初显示一个
    JFrame
    ,其中包含一个
    JButton
    ,该按钮显示文本Add。每次单击按钮时,按钮上方会出现一个新的
    JButton
    。每个新创建的按钮上的文本是一个带前导零的三位数,每次单击按钮时前导零都会递增单击添加按钮。每当添加新按钮时,
    JFrame
    会增加高度以显示新添加的按钮

    导入java.awt.BorderLayout;
    导入java.awt.EventQueue;
    导入java.awt.GridLayout;
    导入java.awt.event.ActionEvent;
    导入java.awt.event.ActionListener;
    导入javax.swing.JButton;
    导入javax.swing.JFrame;
    导入javax.swing.JPanel;
    导入javax.swing.WindowConstants;
    公共类GridBTTTN实现ActionListener,Runnable{
    专用int计数器;
    私有JFrame;
    私人JPanel gridPanel;
    @凌驾
    公开募捐{
    showGui();
    }
    @凌驾
    已执行的公共无效操作(操作事件){
    addButtonToGridPanel();
    }
    私有void addButtonToGridPanel(){
    JButton button=newjbutton(String.format(“%03d”,counter++));
    gridPanel.add(按钮);
    frame.pack();
    }
    私有JButton createButton(字符串文本){
    JButton按钮=新JButton(文本);
    addActionListener(这个);
    返回按钮;
    }
    私有JPanel CreateButtonPanel(){
    JPanel buttonPanel=新的JPanel();
    按钮面板添加(创建按钮(“添加”));
    返回按钮面板;
    }
    私有JPanel createGridPanel(){
    gridPanel=newJPanel(新的GridLayout(0,1));
    返回网格面板;
    }
    私有void showGui(){
    框架=新的JFrame(“网格”);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    添加(createGridPanel(),BorderLayout.CENTER);
    frame.add(createButtonsPanel(),BorderLayout.PAGE_END);
    frame.pack();
    frame.setLocationByPlatform(真);
    第六帧
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class YY extends JFrame {
      static String[] args;
    
      public YY() {
        setSize(160, 200);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        int icnt= args.length==0 ? 5 : Integer.parseInt(args[0]);
    
        Box box= Box.createVerticalBox();
        for (int i=1; i<=icnt; i++) {
          JButton btn= new JButton("Button "+i);
          btn.setMaximumSize(new Dimension(150, 30));
          box.add(btn);
        }
        JScrollPane scroll= new JScrollPane(box);
        scroll.setPreferredSize(new Dimension(150, 100));
        add(scroll);
        setVisible(true);
      }
    
      public static void main(String... args) {
        YY.args= args;
        EventQueue.invokeLater(YY::new);
      }
    
    }