标签: boxlayout

BoxLayout无法共享错误

我有这个Java JFrame类,我想在其中使用boxlayout,但是我得到一个错误说法java.awt.AWTError: BoxLayout can't be shared.我见过其他人有这个问题,但是他们通过在contentpane上创建boxlayout来解决它,但这就是我在这里所做的.这是我的代码:

class edit_dialog extends javax.swing.JFrame{
    javax.swing.JTextField title = new javax.swing.JTextField();
    public edit_dialog(){
        setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS));
        add(title);
        pack();
        setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

java layout swing boxlayout

111
推荐指数
4
解决办法
8万
查看次数

如何在boxLayout中的两个按钮之间添加空格?

我在一BoxLayout组中有四个按钮.这只是两个样本,因为它都是重复的代码.我想在每个按钮之间创建一个小空间,这样它们就不会相互碰撞.我几乎尝试了所有方法,但.add(Box.Create....)没有任何效果.

    enter.add(Box.createVerticalGlue());
    enter.add(Box.createHorizontalGlue()); 
    //enter.add(new JSeparator(SwingConstants.HORIZONTAL));
    JButton float = new JButton("LOWER");
    float.add(Box.createVerticalGlue());
    float.add(Box.createHorizontalGlue());
Run Code Online (Sandbox Code Playgroud)

java user-interface swing jbutton boxlayout

42
推荐指数
1
解决办法
7万
查看次数

java BoxLayout面板的对齐方式

我浏览过,并没有找到专门针对我的情况定制的解决方案.我有一个面板,我在对话框中显示:

//create dialog panel
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(headerPanel);
panel.add(type1Panel);
panel.add(type2Panel);
panel.add(type3Panel);
panel.add(type4Panel);
panel.add(type5Panel);
panel.add(type6Panel);

int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION);
Run Code Online (Sandbox Code Playgroud)

最后两个面板的大小,类型5和类型6,大小相同,所以它们看起来很好.但是,标题和前4个面板的大小不同,我希望它们全部左对齐.到目前为止,我还没有找到一个很好的解决方案,如何解决这个问题.

问题是,我怎么能保持对齐前5个面板,而不是最后2个?如果不是,我怎么能将它们全部对齐?setalignmentx()不适用于面板.我已经使用网格布局尝试过,但随后的GUI的主窗口的宽度相当大,不能很好地适应屏幕,因此BoxLayout的沿Ÿaxis.Thanks任何帮助或建议.

java user-interface swing layout-manager boxlayout

12
推荐指数
3
解决办法
7万
查看次数

如何在另一个JPanel中将JPanel扩展到最大宽度

我觉得我需要稍微改一下这个问题.

更新了以下问题.

我有一个JPanel包含:

myjpanel.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
Run Code Online (Sandbox Code Playgroud)

它包含以下三个面板:

固定大小为'x'和'y'的JPanel

JPanel没有固定的大小

JPanel没有固定的尺寸和小的高度

第二个JPanel包含一个JTable,因此它会扩展以填充整个高度,并按预期方式将底部面板完全按下.

像这样:

t
t
m
m
m
m
m
b
Run Code Online (Sandbox Code Playgroud)

t =顶部面板,m =中间面板,b =底部面板.

这样可行.但是底部面板不像填充父级的整个宽度那样是一个问题.

ttt
mmm
 b 
Run Code Online (Sandbox Code Playgroud)

我想要这个,面板填充整个宽度:

ttt
mmm
bbb
Run Code Online (Sandbox Code Playgroud)

或者,底部面板保持居中的位置:

ttt
mmm
b
Run Code Online (Sandbox Code Playgroud)

老问题如下:

我有一个JPanel包含:

.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
Run Code Online (Sandbox Code Playgroud)

在其中,还有三个JPanels.前两个是固定大小而中间一个不是.

我希望我的底部面板只占用它所需的高度,但使用外部JPanel的所有可用宽度.

我尝试过使用胶水,但无济于事,我宁愿不设置首选和最小/最大尺寸.有没有办法告诉组件只使用布局管理器和框架"填充整个父级宽度".我宁愿不开始做像设置大小和重写方法的黑客.

注意:我不能在内部面板中放置任何胶水或填充物,只能修改外部面板及其布局管理器.

尝试1:

使用myPanel.setLayout(new GridLayout(3, 1));没有产生预期的结果.它做了一个像这样的网格:

XX
 X
Run Code Online (Sandbox Code Playgroud)

但我预计:

X
X
X
Run Code Online (Sandbox Code Playgroud)

尝试2:

使用myPanel.setLayout(new GridLayout(0,1));没有产生预期的结果.它做了一个像这样的网格:

x
x
x
Run Code Online (Sandbox Code Playgroud)

但是所有面板的尺寸都相同,忽略了限制.

java swing jpanel layout-manager boxlayout

12
推荐指数
2
解决办法
4万
查看次数

为什么需要使用BoxLayout调用setLayout?

大多数布局管理器都没有参数构造函数(也就是说,你可以创建一个FlowLayout new FlowLayout (),一个GridLayout new GridLayout (),一个GridBagLayout new GridBagLayout ()等).但是,BoxLayout要求您传递将要管理的容器和应该布置组件的轴.

我的问题是:既然你已经告诉布局管理器要布局哪个组件,你为什么要写

BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
Run Code Online (Sandbox Code Playgroud)

而不只是第一行?

我参加了一个快速浏览BoxLayout源代码,看到的构造我使用(178-185线)不拨打电话到target.setLayout(this)的那种或任何东西.看起来添加它真的很简单.有没有理由为什么它不包含在Swing库中?

如果重要,我正在使用

java版本1.7.0

Java(TM)SE运行时环境(版本1.7.0-b147)

在Win7Pro上.

谢谢!


SSCCE:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

public class BoxLayoutSSCCE extends JFrame {

    // Change this to see what I mean
    public static final boolean CALL_SET_LAYOUT = true;

    public BoxLayoutSSCCE () {
        super("Box Layout SSCCE");
        JPanel panel = new JPanel();
        BoxLayout bl = new …
Run Code Online (Sandbox Code Playgroud)

java layout swing layout-manager boxlayout

8
推荐指数
1
解决办法
3169
查看次数

如何使用BoxLayout在容器内设置组件大小

面对使用BoxLayout的问题

在我的示例中,我尝试降低文本字段的高度并更改按钮的宽度(如图中的绿色标记所示).我知道setPrefferedSize()和setMaximumSize()技术,但它没有按预期工作.行添加(Box.createHorizo​​ntalGlue())也没有帮助.

谢谢你的想法

public class Testy extends JPanel {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                constructGUI();
            }
        });
    }

    private static void constructGUI() {
        JFrame frame = new JFrame("Testy");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel centerPanel = new JPanel();
        centerPanel.setBackground(Color.DARK_GRAY);
        centerPanel.setPreferredSize(new Dimension(100, 400));
        frame.add(centerPanel, BorderLayout.CENTER);

        Testy eastPanel = new Testy();
        frame.add(eastPanel, BorderLayout.EAST);

        frame.pack();
        frame.setVisible(true);
    }

    public Testy() {
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

        JButton button = new JButton("Button ...... 1");
        //button.setPreferredSize(...);
        //button.setMaximumSize(...);
        add(button);

        button = new JButton("Button 2"); …
Run Code Online (Sandbox Code Playgroud)

java layout swing layout-manager boxlayout

8
推荐指数
1
解决办法
4万
查看次数

Swing BoxLayout问题 - 不能让填充物完成它们的工作

我想做什么

在Swing中,我试图使用一个BoxLayout或等效的线性容器,但容器中的项目是垂直拉伸的.在我的应用程序中,我不希望它们垂直拉伸.

我知道我可以在组件上设置preferredSize或maximumSize,但是下面的代码只是一个复制器,我不能硬编码或最大化组件的大小,这些组件的真实性更加复杂和动态.而我只是不能使用BorderLayoutBorderLayout.TOP位置,因为没有滚动条都不会显示如果我这样做.我可能需要滚动窗格.


我试过了什么

所以我尝试使用fillersin in BoxLayoutin In Inibleible Components as Filler,但它只是不起作用.虽然在Oracle文档中,它似乎正是我所需要的.以下是我的尝试:

    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;


    public class TestBoxLayout implements Runnable {

        public static void main(String[] args) {
            SwingUtilities.invokeLater(new TestBoxLayout());
        }

        @Override
        public void run() {
            JFrame f = new JFrame("test box layout");

            JPanel b = new JPanel();
            b.setLayout(new BoxLayout(b, BoxLayout.PAGE_AXIS));

            b.add(new JTextField("field 1"));
            b.add(new JTextField("field 2"));
            b.add(new JTextField("field 3")); …
Run Code Online (Sandbox Code Playgroud)

java layout swing boxlayout

7
推荐指数
1
解决办法
3396
查看次数

Java Swing BoxLayout忽略AlignmentX

在下面的代码,通过调用setAlignmentXComponent.LEFT_ALIGNMENT我预计在居中滑块获得靠左对齐的标签.由于某种原因,标签也是居中的,看起来无论传递给setAlignmentX的值是什么.

我必须将什么值传递给setAlignmentX以使其保持对齐?

package myjava;

import java.awt.Component;
import java.awt.Container;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;

public class LayoutTest {

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("BoxLayoutDemo");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                // create left aligned label over centered column
                Container contentPane = frame.getContentPane();
                contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
                JLabel label = new JLabel("test");
                label.setAlignmentX(Component.LEFT_ALIGNMENT);
                contentPane.add(label);
                contentPane.add(new JSlider());

                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing boxlayout

6
推荐指数
1
解决办法
3049
查看次数

Y-Axis上Java BoxLayout中单个字符的对齐偏离中心

在Java中沿y轴将某些字符对齐到BoxLayout的中心似乎存在问题.我不知道是什么导致这种情况,我已经创建了一个SSCCE来证明这种效果.在这个例子中,我只使用了字符'a',我在每个JPanel的正中间画一条线来演示每个案例离中心有多远.粗体文本的情况似乎很好,但正常的格式和斜体都非常偏离中心,尽管同时使用了setAlignmentX和setHorizo​​ntalAlignment.任何帮助理解这种效果的人都表示赞赏.

在我的特定计算机上以某种方式出现问题的情况下,这是我运行SSCCE时屏幕上显示的内容的图像,SSCCE沿着y轴加载三个不同的带有BoxLayouts的JPanel并仅放置一个居中的JLabel每个角色'a': 在此输入图像描述

这是SSCCE的代码:

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

public class AlignmentTest extends JPanel
{
    public AlignmentTest(char label, int style)
    {
        JLabel l = new JLabel(Character.toString(label));
        setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
        setBackground(Color.WHITE);
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        setPreferredSize(new Dimension(300,50));
        add(Box.createVerticalGlue());
        add(l);
            l.setFont(l.getFont().deriveFont(style));
            l.setAlignmentX(CENTER_ALIGNMENT);
            l.setHorizontalAlignment(JLabel.CENTER);
        add(Box.createVerticalGlue());
    }
    public static void main(String[] args)
    {
        JFrame f = new JFrame("Alignment Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1,0,5,5));
        f.add(new AlignmentTest('a',Font.PLAIN));
        f.add(new AlignmentTest('a',Font.BOLD));
        f.add(new AlignmentTest('a',Font.ITALIC));
        f.pack();
        f.setVisible(true);
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawLine(getWidth()/2,0,getWidth()/2,getHeight());
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing jlabel char boxlayout

6
推荐指数
2
解决办法
512
查看次数

为什么不能共享BoxLayout而FlowLayout可以共享?

我对此感到困惑.

案例A.

  1. 将JFrame的布局管理器设置为BoxLayout.
  2. 将JButton添加到JFrame容器中.
  3. 编译.
  4. 跑.
  5. 抛出异常:"线程中的异常"AWT-EventQueue-0"java.awt.AWTError:BoxLayout无法共享"

案例B

  1. 将JFrame的布局管理器设置为FlowLayout.
  2. 将JButton添加到JFrame容器中.
  3. 没有异常抛出.

为什么案例A抛出异常而案例B没有抛出异常?为什么FlowLayout和BoxLayout在这方面表现不同?在案例A中,"BoxLayout无法共享"是什么意思?

我在这个网站上读过一些关于这个异常消息的类似线程,但我仍然对与FlowLayout的比较以及异常消息的确切含义感到困惑.

java swing exception flowlayout boxlayout

6
推荐指数
1
解决办法
101
查看次数