Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有滚动条集内容的JPanel无法调整大小_Java_Swing_Jpanel_Jscrollpane - Fatal编程技术网

Java 带有滚动条集内容的JPanel无法调整大小

Java 带有滚动条集内容的JPanel无法调整大小,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我的目标是在一个框中显示通过UDP服务器接收的消息。 为此,我创建了一个JScrollBar,并添加了一个JPanel。 当我收到一条消息时,会创建扩展JTextArea的object ReceivedCommand并将其添加到JPanel中。 我这里的问题是,当我在JPanel中显示太多消息时,它会自动调整我的文本区域。 如何将文本区域设置为不可调整大小,以便即使消息在面板中不可见,也可以添加消息,然后使滚动条最终可用 下面是我的测试代码来说明: package test; import j

我的目标是在一个框中显示通过UDP服务器接收的消息。 为此,我创建了一个JScrollBar,并添加了一个JPanel。 当我收到一条消息时,会创建扩展JTextArea的object ReceivedCommand并将其添加到JPanel中。 我这里的问题是,当我在JPanel中显示太多消息时,它会自动调整我的文本区域。 如何将文本区域设置为不可调整大小,以便即使消息在面板中不可见,也可以添加消息,然后使滚动条最终可用

下面是我的测试代码来说明:

package test;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.LineBorder;

public class test {

    public static void main(String args[]){
        JFrame frame  = new JFrame();

        JPanel RXCommand = new JPanel();
        RXCommand.setPreferredSize(new Dimension(500, 250));
        RXCommand.setBorder(new LineBorder(Color.black));
        RXCommand.setLayout(new GridLayout(0,1));

        JScrollPane scrollPane = new JScrollPane(RXCommand, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setPreferredSize(new Dimension(500, 250));

        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));
        RXCommand.add(new ReceivedCommand("11:02:56", "5", "5", "command exemple", "command exemple"));

        frame.add(scrollPane);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
收到命令:

package test;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JTextArea;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class ReceivedCommand extends JTextArea {
    public ReceivedCommand(String time, String init, String now, String cmd1, String cmd2) {
        this.setPreferredSize(new Dimension(495, 50));
        this.setText("Reçu : " + time +" Canal initial : " + init + " Canal actuel : " + now + "\nCommande 1 :" + cmd1 + "\nCommande 2 : " + cmd2); 
        this.setBorder(new CompoundBorder(new EmptyBorder(5, 5, 5, 5), new LineBorder(Color.black)));   

    }
}
首先,变量名不应以大写字符开头。论坛将突出显示类名,使代码易于阅读。注意论坛如何认为你的变量名是类名?学习并遵循Java命名约定

如何将文本区域设置为不可调整大小

不要使用网格布局。GridLayout将占用所有可用空间。所以第一个组件占据了100%的空间。如果你有两个,每个占50%

而是使用
BoxLayout
GridBagLayout

阅读上Swing教程中的部分,以获取更多信息和示例,帮助您入门

然后使滚动条最终发挥作用


以上Andrew的评论已经回答了我的问题。

请看(是)。我开始使用swing,因为我的gui应该在我知道分辨率的触摸屏上实现,我没有想过不使用首选方法。既然我已经看到这是swing中良好使用开发的弃儿,我将尽量不使用它。好的,明天我将尝试实现另一个布局。我会让你知道的。我尝试过使用BoxLayout,它可以正常工作,但我的滚动条不工作。我假设问题来自
scrollPane.setPreferredSize(新维度(500250))。我试图摆脱它,但当我这样做时,滚动条消失了。我应该怎么做才能解决这个问题?编辑:我发现,这是我必须摆脱的RXCommand的首选大小。
JPanel RXCommand = new JPanel();
RXCommand.setLayout(new GridLayout(0,1));