当前位置: 首页 > 知识库问答 >
问题:

如何在Java中压缩BoxLayout

施鸿
2023-03-14

我正在为嵌套在其他一些面板中的面板使用垂直BoxLayout。其他面板的大小会导致目标面板中的对象以不美观的方式展开。如何让面板在没有太多填充的情况下从上到下呈现对象?

下面是类似的代码,尽管它产生了填充整个面板的微调器,而不是相距甚远的普通微调器。

 import java.awt.Dimension;
 import javax.swing.BoxLayout;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;

 public class PanelTest {

  public static void main(String[] args){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

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

    JPanel spinPanel1 = new JPanel();
    spinPanel1.setLayout(new BoxLayout(spinPanel1, BoxLayout.X_AXIS));
    spinPanel1.add(new JLabel("top"));
    SpinnerNumberModel spinMod1 = new SpinnerNumberModel(0,0,10,1);
    spinPanel1.add(new JSpinner(spinMod1));
    leftPanel.add(spinPanel1);

    JPanel spinPanel2 = new JPanel();
    spinPanel2.setLayout(new BoxLayout(spinPanel2, BoxLayout.X_AXIS));
    spinPanel2.add(new JLabel("bottom"));
    SpinnerNumberModel spinMod2 = new SpinnerNumberModel(0,0,10,1);
    spinPanel2.add(new JSpinner(spinMod2));
    leftPanel.add(spinPanel2);

    JPanel rightPanel = new JPanel();
    rightPanel.setPreferredSize(new Dimension(800,600));

    mainPanel.add(leftPanel);
    mainPanel.add(rightPanel);
    frame.getContentPane().add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }
 }

共有1个答案

闻人凯泽
2023-03-14

有许多方法可以做到这一点,主要包括添加具有(constraint /)布局的面板,它将遵循首选大小。在这种情况下,我们使用带有默认约束的< code>GridBagLayout。添加到其中的组件(< code>leftPanel)在可用空间内居中。

每个面板都有一个彩色边框,使其范围更加明显。在调试“布局压缩”问题时,这是一种方便的可视化技术。

顺便说一句,我认为<code>左面板

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class PanelTest {

    public static void main(String[] args) {
        // any single component added to this will be centered & have
        // its preferred size honored.
        JPanel constrainSpinnerPanel = new JPanel(new GridBagLayout());
        constrainSpinnerPanel.setBorder(new LineBorder(Color.CYAN, 4));
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setBorder(new LineBorder(Color.RED,4));
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));

        JPanel leftPanel = new JPanel();
        leftPanel.setBorder(new LineBorder(Color.BLUE,4));
        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));

        JPanel spinPanel1 = new JPanel();
        spinPanel1.setLayout(new BoxLayout(spinPanel1, BoxLayout.X_AXIS));
        spinPanel1.add(new JLabel("top"));
        SpinnerNumberModel spinMod1 = new SpinnerNumberModel(0, 0, 10, 1);
        spinPanel1.add(new JSpinner(spinMod1));
        leftPanel.add(spinPanel1);

        JPanel spinPanel2 = new JPanel();
        spinPanel2.setLayout(new BoxLayout(spinPanel2, BoxLayout.X_AXIS));
        spinPanel2.add(new JLabel("bottom"));
        SpinnerNumberModel spinMod2 = new SpinnerNumberModel(0, 0, 10, 1);
        spinPanel2.add(new JSpinner(spinMod2));
        leftPanel.add(spinPanel2);

        JPanel rightPanel = new JPanel();
        rightPanel.setBorder(new LineBorder(Color.GREEN, 4));
        rightPanel.setPreferredSize(new Dimension(400, 100));

        constrainSpinnerPanel.add(leftPanel);
        mainPanel.add(constrainSpinnerPanel);
        //mainPanel.add(leftPanel);
        mainPanel.add(rightPanel);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setVisible(true);
    }
}
 类似资料:
  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:

  • 问题内容: 我使用GZIPOutputStream或ZIPOutputStream压缩了一个字符串(我string.length()小于20),但是压缩后的结果比原始字符串长。 在某个站点上,我发现一些朋友说这是因为我的原始字符串太短,GZIPOutputStream可用于压缩较长的字符串。 因此,有人可以帮我压缩字符串吗? 我的功能是这样的: 更新: 问题答案: 压缩算法几乎总是具有某种形式的空

  • 问题内容: 我想将普通文件压缩为.zip,然后将其压缩为gzip文件,而不创建新文件。 例如,假设我有一个pdf文档 doc.pdf ,我必须得到的是: 我不想创建一个名为的新文件,然后将其打开并gzip。 我正在与服务器一起从浏览器获取文件并将其返回,这是我的功能: 我得到了一个文件,但是它有一个损坏的文件并且没有压缩,为什么? 问题答案: 我认为您可以为zip创建一个临时文件,将其添加到gzi

  • 我使用LZMA SDK在Windows7(64位)下进行文件压缩/解压缩(LZMA是7-zip中使用的默认算法)。 sdk可以在这里找到(源代码)http://7-zip.org/sdk.html 以加快闪烁过程。我想做增量压缩来分离文件,以获得更小的大小。然而,我想用增量解压缩来解压缩文件,这样第一部分被解压缩,而其他部分来自can总线。 所以在MCU部分,我想要能够一个部分一个部分的解压和闪存

  • 问题内容: 我怀疑这是否是加密,但是找不到更好的短语。 我需要像这样传递一个长查询字符串: 查询字符串不包含任何敏感信息,因此在这种情况下我并不真正担心安全性。只是…好,太长且太丑陋。是否有一个库函数可以让我将查询字符串编码/加密/压缩为类似于md5()的结果(类似于,总是32个字符串),但是可以解码/解密/解压缩? 问题答案: 基本前提是非常困难的。在URL中传输任何值意味着您只能使用ASCII

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭