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

Jpanel元素大小过大

姜彬郁
2023-03-14

我有一个名为MyPanel extend JPanel的类,使用GridLayout。每个单元格都包含一个小部件(一个JComboBox、JTextField、JLabel)。

我的主要类extend JFrame使用GridBagLayout。当我将MyPanel添加到其中时,它会占用大量空间(所有窗口都在我的桌面空间外水平移动)。我该怎么修?这是我的主类的构造函数

public Client() {
    super("title");
    setResizable(false);

    Container main_container = getContentPane();
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();
    main_container.setLayout(layout);

    MyPanel jpanel_acquisto = new MyPanel();
    c.gridx = 0; 
    c.gridy = 0; 
    c.anchor = GridBagConstraints.FIRST_LINE_START;
    c.fill = GridBagConstraints.NONE;
    layout.setConstraints(jpanel_acquisto, c);
    main_container.add(jpanel_acquisto);

    pack();  
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

}

MyPanel构造函数

    super();
    this.setLayout(new GridLayout(2,5));

    combo_box_produttori = new JComboBox(lista_produttori);
    combo_box_magazzini = new JComboBox(lista_magazzini);
    descrizione = new JTextField("120 caratteri max", DESCRIPTION_MAX_LENGHT);
    label_descrizione = new JLabel("Descrizione");

    quantita_prodotti = new JTextField(20);
    label_quantità = new JLabel("Numero prodotti");

    salva_acquisto = new JButton("Salva acquisto");


    this.add(Box.createGlue());
    this.add(label_descrizione);
    this.add(label_quantità);
    this.add(Box.createGlue());
    this.add(Box.createGlue());

    this.add(combo_box_produttori);
    this.add(descrizione);
    this.add(quantita_prodotti);
    this.add(combo_box_magazzini);
    this.add(salva_acquisto);

共有2个答案

冯流觞
2023-03-14

格里袋布局自动拉伸和适合其元素根据他们的大小如果你想使用格里袋定位东西。您可以在面板内放置空面板作为缓冲区,填充空间以防止主要元素拉伸过多。

main_container.add(fillerPanel);
main_container.add(jpanel_acquisto);
main_container.add(fillerPanel);

您还需要使用此处提供的静态常量来调整gridbag约束

戚逸清
2023-03-14

1) 看看你的代码,似乎这是什么;这让它脱离了银幕:

descripione=新的JTextField(“最大120克拉”,描述最大长度)

看起来像一个有120列的JTextField?!

而是使用:

>

  • 如果必须在JScrollPane中包装JTextField。有关更多信息,请参见如何使用滚动窗格。

    JTextArea/JTextPane/JTextComponent。有关更多信息,请参见使用文本组件。

    您还可以将上面的(JTextComponent)包装在JScrollPane中。

    你可以这样做:

    int rows=6;
    int cols=20;//20*6=120 characters
    JTextArea ja=new JTextArea(rows,cols);
    ja.setWrapStyleWord(true);
    ja.setLineWrap(true);
    JScrollPane jsp=new JScrollPane(ja);
    

    2)也不要扩展JFrame类,而是创建和实例并使用它,并确保您在事件调度线程上创建/管理Swing组件。更多信息请参见这里。

    SwingUtilities.invokeLater(new Runnable() {
    
        @Override
        public void run() {
    
            JFrame frame=new JFrame();
            frame.add(..);
            frame.setVisible(true);
    
        }
    
    });
    

  •  类似资料:
    • 本节介绍的属性和方法并不属于“DOM2 级样式”规范,但却与HTML 元素的样式息息相关。DOM中没有规定如何确定页面中元素的大小。IE 为此率先引入了一些属性,以便开发人员使用。目前,所有主要的浏览器都已经支持这些属性。 1. 偏移量首先要介绍的属性涉及偏移量(offset dimension),包括元素在屏幕上占用的所有可见的空间。元素的可见大小由其高度、宽度决定,包括所有内边距、滚动条和边框

    • 我有一个针对不同元素的JPanels集合:JPanelShowPane、seasonsPane、episodesPane、airingsPane 所有这些元素的setLayout设置为null,大小固定为304x416。我将这些JPanel添加到一个大小为1280x416的名为showViewPanel的JPanel中,并设置了一个BoxLayout,如下所示(下面是JFrame中的代码): 我搞

    • 为了增强用户体验,CSS3 中新增了一个非常实用的 resize 属性,该属性允许用户通过拖动的方式来自由缩放元素的尺寸,在此之前要实现类似的效果还需要借助大量的 JavaScript 代码。resize 属性的语法格式如下: resize: none|both|horizontal|vertical; 语法说明如下: none:用户无法调整元素的尺寸; both:用户可调整元素的高度和宽度; h

    • JavaScript 中有许多属性可让我们读取有关元素宽度、高度和其他几何特征的信息。 我们在 JavaScript 中移动或定位元素时,我们会经常需要它们。 示例元素 作为演示属性的示例元素,我们将使用下面给出的元素: <div id="example"> ...Text... </div> <style> #example { width: 300px; height:

    • 问题内容: 我不明白为什么以下代码段会产生不同的结果,因为CSS会在画布放大时缩放画布, 与这种方法相反(按预期工作): 问题答案: canvas元素的固有尺寸等于坐标空间的大小,其数字以CSS像素表示。但是,可以通过样式表任意设置元素的大小。 在渲染期间,将图像缩放以适合此布局大小 。