带有 JScrollPane 和 JPanel 的对话框为空
dialog empty with JScrollPane und JPanel
我正在尝试将内容添加到 mainPanel 并将 mainpanel 添加到 mainScrollPane。但是,会显示一个空对话框。
重要提示:必须使用 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);`
谢谢大家
请提供一个最小的可重现示例。它可能如下所示:
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
IMPORTANT: it must be implemented with JPanel and JScrollPane...
JScrollPane mainScrollPane = new JScrollPane();
mainScrollPane.add(mainPanel);
您不应将组件直接添加到滚动窗格。相反,您需要将组件添加到滚动窗格的 viewport
。
这可以通过使用来完成:
JScrollPane mainScrollPane = new JScrollPane(mainPaneol);
//mainScrollPane.add(mainPanel);
或
JScrollPane mainScrollPane = new JScrollPane();
//mainScrollPane.add(mainPanel);
mainScrollPane.setViewportView(mainPanel);
滚动窗格随后会像您的代码当前所做的那样添加到框架中。
请注意,您不会注意到滚动窗格的使用,因为目前没有理由显示滚动条。所以真的没有必要使用滚动面板,直接把面板加到frame上就可以了。
我正在尝试将内容添加到 mainPanel 并将 mainpanel 添加到 mainScrollPane。但是,会显示一个空对话框。
重要提示:必须使用 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);`
谢谢大家
请提供一个最小的可重现示例。它可能如下所示:
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
IMPORTANT: it must be implemented with JPanel and JScrollPane...
JScrollPane mainScrollPane = new JScrollPane();
mainScrollPane.add(mainPanel);
您不应将组件直接添加到滚动窗格。相反,您需要将组件添加到滚动窗格的 viewport
。
这可以通过使用来完成:
JScrollPane mainScrollPane = new JScrollPane(mainPaneol);
//mainScrollPane.add(mainPanel);
或
JScrollPane mainScrollPane = new JScrollPane();
//mainScrollPane.add(mainPanel);
mainScrollPane.setViewportView(mainPanel);
滚动窗格随后会像您的代码当前所做的那样添加到框架中。
请注意,您不会注意到滚动窗格的使用,因为目前没有理由显示滚动条。所以真的没有必要使用滚动面板,直接把面板加到frame上就可以了。