[英]Java JScrollPane ve
我想制作一個Java代碼,可以在其中插入任意數量的面板。 這樣我就可以向下滾動以查看面板。 我現在為止很遠:但是我的問題是,我無法向下滾動。 我用JTextAreas測試了JScrollPane,它工作得很好。
package test;
import java.awt.*;
import javax.swing.*;
public class Scrollbar {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JTextField tFId = new JTextField("ID: ", 5);
JTextField tFName = new JTextField("Name: ", 5);
JTextField tFHersteller = new JTextField("Hersteller: ", 5);
JTextField tFId2 = new JTextField("ID: ", 5);
JTextField tFName2 = new JTextField("Name: ", 5);
JTextField tFHersteller2 = new JTextField("Hersteller: ", 5);
JTextField tFId3 = new JTextField("ID: ", 5);
JTextField tFName3 = new JTextField("Name: ", 5);
JTextField tFHersteller3 = new JTextField("Hersteller: ", 5);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
panel.setLayout(new FlowLayout());
panel.setPreferredSize(new Dimension(200, 85));
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
JScrollPane scrollPanel = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
panel1.setLayout(new FlowLayout());
panel1.add(tFId);
panel1.add(tFName);
panel1.add(tFHersteller);
panel2.setLayout(new FlowLayout());
panel2.add(tFId2);
panel2.add(tFName2);
panel2.add(tFHersteller2);
panel3.setLayout(new FlowLayout());
panel3.add(tFId3);
panel3.add(tFName3);
panel3.add(tFHersteller3);
frame.add(scrollPanel);
frame.setVisible(true);
}
}
您正在過度使用FlowLayout。
不同的布局具有不同的行為。 首先,您需要刪除以下行:
frame.setLayout(new FlowLayout());
框架內容窗格的默認布局是BorderLayout。 您希望以這種方式保留它,因為添加到BorderLayout且沒有任何約束的組件將放置在中心,該組件將在其中伸展以填充整個空間。
其次,您要刪除這些:
panel.setLayout(new FlowLayout());
panel.setPreferredSize(new Dimension(200, 85));
設置首選大小會干擾JScrollPane管理其視圖(即panel
)的能力。 當您希望組件顯示在多行中時,應嘗試通過限制FlowLayout的寬度來強制執行它。 而是使用旨在將組件放置在不同行上的布局。 最好的選擇是GridBagLayout :
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
panel.add(panel1, gbc);
panel.add(panel2, gbc);
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;
panel.add(panel3, gbc);
在約束中使用GridBagConstraints.REMAINDER將告訴GridBagLayout使子組件占據整個行。
weighty = 1
的使用告訴GridBagLayout當面板大於其子項時,要添加的子項的網格單元應占用所有額外的垂直空間。 最后,無論網格單元有多高,GridBagConstraints.NORTH都將其子項放置在拉伸網格單元的頂部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.