为什么我的标题边框面板如此之小

时间:2016-04-04 14:12:38

标签: java swing layout

我正在使用图形面板,命令面板和命令列表面板创建GUI。我使用BorderLayout South在框架的底部有我想要的命令面板但是我的侧面板很小且不可读。

Ill提供了我希望我的画面在最后看起来像什么的图片:

enter image description here

我现在有什么:

enter image description here

有人可以解释为什么TitledBorder面板如此之小吗?

我的代码如下:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class PenDriver {

public static void main(String[] args) {

    JFrame frame = new JFrame("Pen Simulator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 400);

    penPanel panel = new penPanel();

    frame.add(panel);

    frame.setVisible(true);

}

}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;

public class penPanel extends JPanel {

private JTextField userCommand;
private JLabel instruction1;
private JButton instruct, clear;
private JLabel cmd1;

public penPanel() {

    setLayout(new BorderLayout());

    // CREATE THE COMMAND PANEL///////

    // Set Layout
    JPanel command = new JPanel();
    command.setLayout(new BoxLayout(command, BoxLayout.LINE_AXIS));
    // Create Label and add to panel
    instruction1 = new JLabel("Enter Command:");
    // Create Buttons
    instruct = new JButton("Execute");
    clear = new JButton("Clear Graphics");

    // Create Text Field to panel
    userCommand = new JTextField(10);

    command.add(instruction1);
    command.add(Box.createRigidArea(new Dimension(4, 0)));
    command.add(userCommand);
    command.add(Box.createRigidArea(new Dimension(2, 0)));
    command.add(instruct);
    command.add(Box.createRigidArea(new Dimension(2, 0)));
    command.add(clear);

    // COMMAND PANEL FINISHED////////

    // CREATE THE COMMAND LIST PANEL//////////
    JPanel cmdList = new JPanel();
    cmdList.setBorder(BorderFactory.createTitledBorder("Command List:"));
    cmdList.setLayout(new BoxLayout(cmdList, BoxLayout.PAGE_AXIS));
    cmd1 = new JLabel("UP = up");
    cmdList.setSize(new Dimension(50, 400));
    cmdList.add(cmd1);

    add(command, BorderLayout.SOUTH);
    add(cmdList, BorderLayout.EAST);

}

}

谢谢!

编辑:经过一些修补这段代码后:

    cmdList.setPreferredSize(new Dimension(120, 800));
    cmdList.add(cmd1);

    add(command, BorderLayout.SOUTH);
    command.add(Box.createRigidArea(new Dimension(120, 0)));
    add(cmdList, BorderLayout.EAST);

enter image description here

仍然不是我想要的,也不确定这是不是我应该做的。我应该直接改变驱动程序文件而不是JPanels吗?

请注意“清除图形”按钮右侧是否仍存在间隙。有什么方法可以摆脱它吗?

1 个答案:

答案 0 :(得分:1)

  

有人可以解释为什么TitledBorder面板如此之小吗?

边框中文本的大小不用于确定组件的大小。因此宽度取决于您添加到面板的组件的首选大小。

因此,您需要覆盖面板的getPreferredSize()方法,以返回默认首选大小计算的最大值或标题边框的大小:

JPanel cmdList = new JPanel()
{
    @Override
    public Dimension getPreferredSize()
    {
        Dimension preferredSize = super.getPreferredSize();

        Border border =    getBorder();
        int borderWidth = 0;

     if (border instanceof TitledBorder)
     {
         Insets insets = getInsets();
         TitledBorder titledBorder = (TitledBorder)border;
         borderWidth = titledBorder.getMinimumSize(this).width + insets.left + insets.right;
     }

     int preferredWidth = Math.max(preferredSize.width, borderWidth);

     return new Dimension(preferredWidth, preferredSize.height);
    }
};
  

请注意“清除图形”按钮右侧是否仍存在间隙。有什么方法可以摆脱它吗?

command.add(Box.createRigidArea(new Dimension(120, 0)));

您刚刚将刚性区域添加到命令面板,因此您要求在末尾添加额外的120像素。