Java 两列布局和第一列截断

Java 两列布局和第一列截断,java,swing,border-layout,Java,Swing,Border Layout,我正在尝试使用BorderLayout创建一个JPanel,其中包含两个JLabel。 第一个JLabel应使用除第二个JLabel之外的所有可用水平空间 目前,我的结果如下: 我试图做到的是: 这里有一个SSCCE: import javax.swing.*; import java.awt.*; public class TwoColumnsTruncate { public TwoColumnsTruncate() { JPanel panel = new J

我正在尝试使用
BorderLayout
创建一个
JPanel
,其中包含两个
JLabel
。 第一个
JLabel
应使用除第二个
JLabel
之外的所有可用水平空间

目前,我的结果如下:

我试图做到的是:

这里有一个SSCCE:

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

public class TwoColumnsTruncate {
    public TwoColumnsTruncate() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
        JLabel right = new JLabel("Some short text");
        panel.add(left, BorderLayout.WEST);
        panel.add(right, BorderLayout.EAST);
        JFrame frame = new JFrame(getClass().getSimpleName());
        frame.getContentPane().add(panel);
        frame.setMinimumSize(new Dimension(400, 75));
        frame.setMaximumSize(new Dimension(400, 75));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new TwoColumnsTruncate();
    }
}

你有什么建议可以帮我做到这一点吗?

让我有些惊讶的是,我发现你可以通过将
左侧的
标签指定给
BorderLayout.CENTER
而不是
BorderLayout.WEST
来实现这一点。我必须对文档进行更多的研究(可能更多),以找出原因。

让我有些惊讶的是,我发现您可以通过将
左侧
标签指定给
BorderLayout.CENTER
而不是
BorderLayout.WEST
来完成这一任务。我必须对文档进行更多的研究(可能更多),以找出原因。

让我有些惊讶的是,我发现您可以通过将
左侧
标签指定给
BorderLayout.CENTER
而不是
BorderLayout.WEST
来完成这一任务。我必须对文档进行更多的研究(可能更多),以找出原因。

让我有些惊讶的是,我发现您可以通过将
左侧
标签指定给
BorderLayout.CENTER
而不是
BorderLayout.WEST
来完成这一任务。我必须进一步研究文档(可能更多)以找出原因。

下面,我已经注释掉了您添加标签的常规两行,并选择使用我自己喜欢的方法,让事情看起来更真实,GridBags。这是你修改过的代码,展示了我的想法

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

public class TwoColumnsTruncate {
    public TwoColumnsTruncate() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
        JLabel right = new JLabel("Some short text");

        GridBagLayout layout=new GridBagLayout();
        GridBagConstraints gbc=new GridBagConstraints();

        layout.columnWidths=new int[] {198, 198};
        layout.rowHeights=new int[] {70};
        panel.setLayout(layout);

        gbc.fill=GridBagConstraints.BOTH;
        gbc.insets=new Insets(0, 0, 0, 0);

        gbc.gridx=0;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(left, gbc);

        gbc.gridx=1;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(right, gbc);

        //panel.add(left, BorderLayout.WEST);
        //panel.add(right, BorderLayout.EAST);
        JFrame frame = new JFrame(getClass().getSimpleName());
        frame.getContentPane().add(panel);
        frame.setMinimumSize(new Dimension(400, 75));
        frame.setMaximumSize(new Dimension(400, 75));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new TwoColumnsTruncate();
    }
}
正如您可以看到的那样,按原样运行它将生成所需的省略号。任何进一步的移动都可以通过更改给定的插入和列宽来实现。我建议稍微修改一下这些,因为由于摆动的反复无常和缺乏图像安全性,像素往往会被弄乱。
我希望这能解决你的问题,祝你好运。另外,如果你对GridBag的东西有任何问题,请随时给我发个消息。

下面,我已经注释掉了你添加标签的常规两行,而是选择使用我自己喜欢的方法,让东西看起来更真实,GridBag。这是你修改过的代码,展示了我的想法

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

public class TwoColumnsTruncate {
    public TwoColumnsTruncate() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
        JLabel right = new JLabel("Some short text");

        GridBagLayout layout=new GridBagLayout();
        GridBagConstraints gbc=new GridBagConstraints();

        layout.columnWidths=new int[] {198, 198};
        layout.rowHeights=new int[] {70};
        panel.setLayout(layout);

        gbc.fill=GridBagConstraints.BOTH;
        gbc.insets=new Insets(0, 0, 0, 0);

        gbc.gridx=0;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(left, gbc);

        gbc.gridx=1;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(right, gbc);

        //panel.add(left, BorderLayout.WEST);
        //panel.add(right, BorderLayout.EAST);
        JFrame frame = new JFrame(getClass().getSimpleName());
        frame.getContentPane().add(panel);
        frame.setMinimumSize(new Dimension(400, 75));
        frame.setMaximumSize(new Dimension(400, 75));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new TwoColumnsTruncate();
    }
}
    frame.getContentPane().add(panel);
    frame.setMinimumSize(new Dimension(400, 75));
    frame.setMaximumSize(new Dimension(400, 75));
    frame.setVisible(true);
正如您可以看到的那样,按原样运行它将生成所需的省略号。任何进一步的移动都可以通过更改给定的插入和列宽来实现。我建议稍微修改一下这些,因为由于摆动的反复无常和缺乏图像安全性,像素往往会被弄乱。
我希望这能解决你的问题,祝你好运。另外,如果你对GridBag的东西有任何问题,请随时给我发个消息。

下面,我已经注释掉了你添加标签的常规两行,而是选择使用我自己喜欢的方法,让东西看起来更真实,GridBag。这是你修改过的代码,展示了我的想法

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

public class TwoColumnsTruncate {
    public TwoColumnsTruncate() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
        JLabel right = new JLabel("Some short text");

        GridBagLayout layout=new GridBagLayout();
        GridBagConstraints gbc=new GridBagConstraints();

        layout.columnWidths=new int[] {198, 198};
        layout.rowHeights=new int[] {70};
        panel.setLayout(layout);

        gbc.fill=GridBagConstraints.BOTH;
        gbc.insets=new Insets(0, 0, 0, 0);

        gbc.gridx=0;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(left, gbc);

        gbc.gridx=1;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(right, gbc);

        //panel.add(left, BorderLayout.WEST);
        //panel.add(right, BorderLayout.EAST);
        JFrame frame = new JFrame(getClass().getSimpleName());
        frame.getContentPane().add(panel);
        frame.setMinimumSize(new Dimension(400, 75));
        frame.setMaximumSize(new Dimension(400, 75));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new TwoColumnsTruncate();
    }
}
    frame.getContentPane().add(panel);
    frame.setMinimumSize(new Dimension(400, 75));
    frame.setMaximumSize(new Dimension(400, 75));
    frame.setVisible(true);
正如您可以看到的那样,按原样运行它将生成所需的省略号。任何进一步的移动都可以通过更改给定的插入和列宽来实现。我建议稍微修改一下这些,因为由于摆动的反复无常和缺乏图像安全性,像素往往会被弄乱。
我希望这能解决你的问题,祝你好运。另外,如果你对GridBag的东西有任何问题,请随时给我发个消息。

下面,我已经注释掉了你添加标签的常规两行,而是选择使用我自己喜欢的方法,让东西看起来更真实,GridBag。这是你修改过的代码,展示了我的想法

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

public class TwoColumnsTruncate {
    public TwoColumnsTruncate() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
        JLabel right = new JLabel("Some short text");

        GridBagLayout layout=new GridBagLayout();
        GridBagConstraints gbc=new GridBagConstraints();

        layout.columnWidths=new int[] {198, 198};
        layout.rowHeights=new int[] {70};
        panel.setLayout(layout);

        gbc.fill=GridBagConstraints.BOTH;
        gbc.insets=new Insets(0, 0, 0, 0);

        gbc.gridx=0;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(left, gbc);

        gbc.gridx=1;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        panel.add(right, gbc);

        //panel.add(left, BorderLayout.WEST);
        //panel.add(right, BorderLayout.EAST);
        JFrame frame = new JFrame(getClass().getSimpleName());
        frame.getContentPane().add(panel);
        frame.setMinimumSize(new Dimension(400, 75));
        frame.setMaximumSize(new Dimension(400, 75));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new TwoColumnsTruncate();
    }
}
    frame.getContentPane().add(panel);
    frame.setMinimumSize(new Dimension(400, 75));
    frame.setMaximumSize(new Dimension(400, 75));
    frame.setVisible(true);
正如您可以看到的那样,按原样运行它将生成所需的省略号。任何进一步的移动都可以通过更改给定的插入和列宽来实现。我建议稍微修改一下这些,因为由于摆动的反复无常和缺乏图像安全性,像素往往会被弄乱。 我希望这能解决你的问题,祝你好运。另外,如果你对GridBag有任何问题,请随时给我发个信息

    frame.getContentPane().add(panel);
    frame.setMinimumSize(new Dimension(400, 75));
    frame.setMaximumSize(new Dimension(400, 75));
    frame.setVisible(true);
应该是:

    frame.getContentPane().add(panel);
    frame.setResizable(false); // guessing you want this, based on the snippet
    frame.pack(); // Set it to the minimum size it actually NEEDS to be.
    frame.setMinimumSize(frame.getSize());
    frame.setVisible(true);
应该是:

    frame.getContentPane().add(panel);
    frame.setResizable(false); // guessing you want this, based on the snippet
    frame.pack(); // Set it to the minimum size it actually NEEDS to be.
    frame.setMinimumSize(frame.getSize());
    frame.setVisible(true);
应该是:

    frame.getContentPane().add(panel);
    frame.setResizable(false); // guessing you want this, based on the snippet
    frame.pack(); // Set it to the minimum size it actually NEEDS to be.
    frame.setMinimumSize(frame.getSize());
    frame.setVisible(true);
应该是:

    frame.getContentPane().add(panel);
    frame.setResizable(false); // guessing you want this, based on the snippet
    frame.pack(); // Set it to the minimum size it actually NEEDS to be.
    frame.setMinimumSize(frame.getSize());
    frame.setVisible(true);

谢谢我明天会试试。我发现,有了这些约束,布局允许正确的标签延伸到组件之外(以便剪裁)。如果框架足够宽,则整个右侧标签可见,但在我的系统上,宽度为400时,只有最初的“部分”可见。
GridBagLayout
的优点是它为用户提供了大量的控制。它的缺点是需要用户进行大量的控制。谢谢。我明天会试试。我发现,有了这些约束,布局允许正确的标签延伸到组件之外(以便剪裁)。如果框架足够宽,则整个右侧标签可见,但在我的系统上,宽度为400时,只有最初的“部分”可见。
GridBagLayout
的优点是它为用户提供了大量的控制。它的缺点是需要用户进行大量的控制。谢谢。我明天会试试。我发现,有了这些约束,布局允许正确的标签延伸到组件之外(以便剪裁)。如果框架足够宽,则整个右侧标签可见,但在我的系统上,宽度为400时,只有最初的“部分”可见。
GridBagLayout
的优点是它为用户提供了大量的控制。它的缺点是需要用户进行大量的控制。谢谢。我明天会试试。我发现有了这些限制,布局允许正确的标签扩展ou