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

为什么我的标题边框面板这么小

陶超
2023-03-14

我正在创建一个带有图形面板、命令面板和命令列表面板的GUI。我有一个命令面板,我想它在底部的框架使用BorderLayout South,但我的侧板只是很小,无法读取。

我将提供一张我希望我的框架在结尾处看起来像什么的图片:

我目前拥有的:

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);

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

请注意“清除图形”按钮右侧仍有一个空隙。有什么办法可以摆脱它吗?

共有1个答案

堵龙野
2023-03-14

有人能解释一下为什么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)));
 类似资料:
  • 如果我直接在构造函数中添加面板,它可以正常工作,但在控制器中则不行。当我在菜单上点击“Reservas”或“Contabilidad”选项之一时,我想更改显示的面板并查看其他内容。 这是我的观点 } 这是我的控制器 } panel对象只有一个jlabel,其中有一个hello要测试

  • 问题内容: 我所有的React项目的文件大小通常都非常大(bundle.js为4.87 mb,vendor.bundle.js为2.87 mb)。我不知道为什么这么大。我已经启用了uglifyJS,但这似乎并没有太大帮助(5.09> 4.87mb和2.9> 2.87mb) 我的package.json 有谁知道如何解决这个问题? 问题答案: 编辑 我不确定您是在Mac / IO还是Windows上

  • 我正在使用PARSE API发出GET请求。我收到一个“414请求URI太大”错误,但我不明白为什么。这是我请求的代码:

  • 我正在尝试使用CSS边框在GUI(fxml)上显示墙。getStyleClass()。add()但它们没有出现。 我正在使用一个开关,将相应的样式类添加到单元格中。 Java代码: CSS代码: GUI事后图片:结果

  • 问题内容: 这是所有编程语言所共有的吗?在进行多次打印后再执行println似乎更快,但是将所有内容移动到字符串中并仅进行打印似乎最快。为什么? 编辑:例如,Java可以在不到一秒钟的时间内找到所有高达100万的质数- 但要进行打印,然后在自己的println中将它们全部输出可能需要几分钟!最多可打印100亿小时! 例如: 问题答案: 速度并不慢,而是由主机操作系统提供的与控制台连接的基础。 您可