Java Swing BoxLayout:在多面板设置中调整面板之间的空间吗?

艾伦·罗德斯

我正在编写此swing应用程序,并且正在使用BoxLayout格式的多个面板,但是似乎面板之间的空白正在它们之间进行划分,而且看起来确实很丑陋。您如何调整和自定义面板之间有多少空间?抱歉,如果这是转贴;我找不到较旧的帖子。

    import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

class gui extends JFrame implements ActionListener{
    JFrame frame = new JFrame("Ark Admin Spawn Commands");
    JPanel panel = new JPanel();
    JComboBox dinos;
    JComboBox corruptedDinos;
    public JSlider dinoLevel;
    JLabel input;
    JLabel dino;
    JLabel title;
    
    
    
    
    
    gui(){
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          JPanel mainPanel = new JPanel();
          mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

          JPanel panelOne = new JPanel();
          JPanel panelTwo = new JPanel();
          JPanel panelThree = new JPanel();

          mainPanel.add(panelOne);
          mainPanel.add(panelTwo);
          mainPanel.add(panelThree);
         
        
        
        
        title = new JLabel("Spawning Dinos");
        
        String[] dinoNames= {"The Island:"};
        String[] corruptedDinoNames = {"Extinction:"};
        dinos = new JComboBox(dinoNames);
        corruptedDinos = new JComboBox(corruptedDinoNames);
        dinoLevel = new JSlider(JSlider.HORIZONTAL, 1, 600, 400);
        dinoLevel.setMajorTickSpacing(20);
        dinoLevel.setPaintTicks(true);
        input = new JLabel("Select Level: ");
        event e = new event();
        dinoLevel.addChangeListener(e);
        
        
        dinos.addActionListener(this);
        corruptedDinos.addActionListener(this);
        panelOne.add(title);
        
        panelTwo.add(input);
        panelTwo.add(dinoLevel);
        
        panelThree.add(dinos);
        panelThree.add(corruptedDinos);
        this.getContentPane().add(mainPanel);
        this.setTitle("Ark Admin Spawn Commands");
        this.setSize(600, 600);
        this.setVisible(true);
        
    }
    public static void main (String args[]) {

        new gui();
        
        
    
    
    }
    
    public class event implements ChangeListener{
        
        @Override
        public void stateChanged(ChangeEvent e) {
            int value = dinoLevel.getValue();
            input.setText("Level: " + value);
            
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent arg0) {
        
        
    }
}
卡米克尔

但似乎是面板之间的空白被分割了

正确。ABoxLayout将尝试为所有组件分配额外的空间。

但是,它将尊重每个面板的最大尺寸。

因此,为防止面板高度增加,可以使用如下代码:

JPanel panelOne = new JPanel()
{
    @Override
    public dimension getMaximumSize()
    {
        Dimension d = getPreferredSize()
        d.width = Integer.MAX_VALUE;

        return d;
    }
};

或者因为框架的默认布局管理器是BorderLayout,您可以使用:

//this.getContentPane().add(mainPanel);
add(mainPanel, BorderLayout.PAGE_START); // getContentPane() is not needed

BorderLayout的PAGE_START尊重组件的首选高度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章