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

对话框为空,JScrollPane und JGroup

安泰平
2023-03-14

我正在尝试将内容添加到主面板,并将主面板添加到主滚动窗格。但是,将显示一个空对话框。

重要提示:它必须用JPanel和JScrollPane实现。。。

   `setModal(true);
    setTitle("Edit item");
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    JPanel mainPanel = new JPanel();
    mainPanel.setPreferredSize(new Dimension(400, 700));

    JScrollPane mainScrollPane = new JScrollPane();
    mainScrollPane.add(mainPanel);
    setLayout(new BorderLayout());
    add(mainScrollPane);

    mainPanel.add(new JLabel("ID: "));
    mainPanel.add(txtID = new JTextField(item.getID()));
    mainPanel.add(new JLabel("Description: "));
    mainPanel.add(txtDescription = new JTextField(item.getDescription()));


    pack();
    setVisible(true);`

谢谢各位

共有2个答案

张嘉
2023-03-14

请提供一个最小的可复制示例。它可能如下所示:

MyFrame.java

import javax.swing.*;
import java.awt.*;

class Item { 
    String id; 
    String description; 
    Item(String id, String description) {this.id = id;this.description = description;}
    String getId() {return id;}
    String getDescription() {return description;}
}

public class MyFrame extends JFrame {
    Item item = new Item("007", "Special watch");
    public MyFrame() {
        // setModal(true);
        setTitle("Edit item");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setPreferredSize(new Dimension(400, 700));

        mainPanel.add(new JLabel("ID: "));
        mainPanel.add(new JTextField(item.getId()));
        mainPanel.add(new JLabel("Description: "));
        mainPanel.add(new JTextField(item.getDescription()));

        /* From Oracle's documentation, see link below: 
           Creates a JScrollPane that displays the contents of the
           specified component, where both horizontal and vertical
           scrollbars appear whenever the component's contents are
           larger than the view.
        */
        JScrollPane mainScrollPane = new JScrollPane(mainPanel);

        // Just to show the bars
        mainScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  
        mainScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);  

        getContentPane().add(mainScrollPane); // <- This makes it shine!

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new MyFrame();
    }
}
$ javac MyFrame.java
$ java MyFrame   

等等瞧:

https://docs.oracle.com/javase/8/docs/api/javax/swing/JScrollPane.html

伏砚
2023-03-14

重要提示:它必须用JPanel和JScrollPane实现。。。

JScrollPane mainScrollPane = new JScrollPane();
mainScrollPane.add(mainPanel);

您不应该将组件直接添加到滚动窗格中。相反,您需要将组件添加到滚动窗格的视口中。

这可以通过以下方式完成:

JScrollPane mainScrollPane = new JScrollPane(mainPaneol);
//mainScrollPane.add(mainPanel);

JScrollPane mainScrollPane = new JScrollPane();
//mainScrollPane.add(mainPanel);
mainScrollPane.setViewportView(mainPanel);

然后将滚动窗格添加到框架中,就像您的代码当前所做的那样。

注意:您不会注意到滚动窗格的用法,因为当前没有理由显示滚动条。因此,确实不需要使用滚动窗格,只需将面板直接添加到框架中即可。

 类似资料:
  • 我用的是Intellij IDEA Ultimate 2016.3.4。 文件/设置/插件/安装JetBrains插件…打开一个名为Browse JetBrains Plugins的窗口,但窗口的主要区域,应该是AFAIK列出JetBrains存储库中可用的插件,只显示“无显示”消息。 我在企业代理后面,所以我使用了HTTP代理设置...按钮 我做错了什么吗? (是的,我也知道有一个解决方法:我可

  • 我在antoher的项目中有完全相同的代码,但它在这里继续崩溃。我有。我真的不确定问题出在哪里。我尝试过切换gradle版本,从切换到。不管怎样,一切都失败了

  • 对话框的内容不是在页面最初可见,而是在用户操作时显示额外的信息。 Toasts Materialize 提供了非常简单的方法,来弹出一些信息,同时也不会让用户感到突兀。这些 Toasts 显示的位置和大小会随着你的设备的不同而改变。 在 JavaScript 中调用 Materialize.toast() 方法来使用。 // Materialize.toast(message, displayLe

  • 对话框是一个现代GUI应用不可或缺的一部分。对话是两个人之间的交流,对话框就是人与电脑之间的对话。对话框用来输入数据,修改数据,修改应用设置等等。 输入文字 QInputDialog提供了一个简单方便的对话框,可以输入字符串,数字或列表。 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In this

  • 打开或保存文件,弹出警告等对话框 进程: 主进程​ 选择多个文件和目录的对话框: 1 const {dialog} = require('electron') 2 console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']})) Copied! 对话框默认是在主线程中

  • 显示用于打开和保存文件、警报等的本机系统对话框。 线程:主线程 显示用于选择多个文件和目录的对话框的示例: const { dialog } = require('electron') console.log(dialog.showOpenDialog({ properties: ['openFile', 'openDirectory', 'multiSelections'] })) 这个对话框是