【问题标题】:Decrease the size of jdialog减小jdialog的大小
【发布时间】:2016-02-24 16:05:24
【问题描述】:

我必须创建一个自定义 jdialog,但我希望它有点小。它不应该有空的空间。下面的代码给了我这个:

如果我使用 setSize 减小大小,则会导致如下所示的不良 GUI:

class Find extends JDialog
{
    JPanel f1,f2,f3,rp;
    JLabel fl,filler1,filler2,filler3;
    JTextField ft,fillert;
    JCheckBox mcase;
    JButton fb1,fb2;
    JRadioButton upr,dr;
    ButtonGroup rg;
    public Find()
    {
        setTitle("Find");

        f3 = new JPanel();
        f3.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        f3.setLayout(new GridLayout(3,1));

        f1 = new JPanel();
        f1.setLayout(new BoxLayout(f1,BoxLayout.X_AXIS));
        f2 = new JPanel();
        f2.setLayout(new BoxLayout(f2,BoxLayout.X_AXIS));

        fl = new JLabel("Find what: ");
        ft = new JTextField();

        fb1 = new JButton("  Find  ");
        mcase = new JCheckBox("Match case",false);
        fb2 = new JButton("Cancel");
        rg = new ButtonGroup();
        upr = new JRadioButton("Up");
        dr = new JRadioButton("Down");
        rg.add(upr);
        rg.add(dr);
        rp = new JPanel();
        rp.add(upr);
        rp.add(dr);

        filler1 = new JLabel(" ");
        filler2 = new JLabel(" ");

        f1.add(fl);
        f1.add(ft);
        f1.add(filler1);
        f1.add(fb1);

        f2.add(mcase);
        f2.add(rp);
        //f2.add(filler2);
        //f2.add(fb2);

        f3.add(f1);
        //f3.add(new JLabel());
        f3.add(f2);

        add(f3);
        setSize(400,120);
        setAlwaysOnTop(true);
        setResizable(false);
        setVisible(true);
    }
}

【问题讨论】:

  • 问题是什么?
  • 我应该怎么做才能使 JDialog 更小以消除底部的空白空间?

标签: java swing user-interface jdialog


【解决方案1】:

您的 f3 JPanel 有一个 GridLayout 3 行,第三行是空的。

你只需要2个,所以试试吧:

f3.setLayout(new GridLayout(2,1));

或者:

将f3的LayoutManager改为垂直BoxLayout

f3.setLayout(new BoxLayout(f3, BoxLayout.Y_AXIS));

并降低JDialog的高度:

setSize(400,100);

【讨论】:

  • 这会导致文本字段更大更笨重:See image
【解决方案2】:
f3.setLayout(new GridLayout(2,1));
ft.setMaximumSize(new Dimension(250,25));

上面的改动成功了!

【讨论】:

  • 更改布局参数与问题无关。参数只是建议。如果只添加两个组件,那么空间将在两个组件之间平均分配。你应该做的是使用pack() 而不是setSize()。然后对话框将以首选大小显示所有组件,而不是您硬编码的任意大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 2023-03-30
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多