Java 正确调整空元素的大小
我正在尝试为数据库创建UI。它有三个主要组件:第一个元素应该是所有类别的可滚动列表,第二个元素是该类别所有项目的可滚动列表,第三个元素是包含实际数据的Java 正确调整空元素的大小,java,swing,Java,Swing,我正在尝试为数据库创建UI。它有三个主要组件:第一个元素应该是所有类别的可滚动列表,第二个元素是该类别所有项目的可滚动列表,第三个元素是包含实际数据的JPanel(目前只有一个占位符,我可能需要为此生成一个HTML文档) 我对JButtons进行了Category和Item class扩展,因为这是它们唯一的用途 JScrollPane catSelect = new JScrollPane(); catSelect.setHorizontalScrollBarPolicy(JS
JPanel
(目前只有一个占位符,我可能需要为此生成一个HTML文档)
我对JButton
s进行了Category
和Item class扩展,因为这是它们唯一的用途
JScrollPane catSelect = new JScrollPane();
catSelect.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
catSelect.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
JPanel csPanel = new JPanel();
csPanel.setLayout(new GridLayout());
csPanel.setPreferredSize(new Dimension(scale.width/1972*300, scale.height));
JScrollPane recSelect = new JScrollPane();
JPanel rsPanel = new JPanel();
rsPanel.setLayout(new GridLayout());
rsPanel.setPreferredSize(new Dimension(scale.width/1792*300, scale.height));
JPanel view = new JPanel();
view.setPreferredSize(new Dimension(scale.width-csPanel.getPreferredSize().width-rsPanel.getPreferredSize().width, scale.height));
Category dc = null;
for(int i = 0; i < categories.size(); i++){
Category cat = categories.get(i);
cat.setPreferredSize(new Dimension(scale.width/1792*300, scale.height/1120*200));
csPanel.add(cat);
cat.addActionListener(rsPanel); //action changes rsPanel content
if(cat.name.equals("Default")){
dc = cat; //will always be assigned
}
}
catSelect.add(csPanel);
for(int i = 0; i < dc.recipes.size(); i++){
Recipe rec = dc.recipes.get(i);
rec.setPreferredSize(new Dimension(scale.width/1792*300, scale.height/1120*200));
rec.addActionlistener(view);
rsPanel.add(dc.recipes.get(i));
}
recSelect.add(rsPanel);
gbc.gridx = 0;
gbc.gridy = 0;
frame.add(catSelect);
gbc.gridx = 1;
gbc.gridy = 0;
frame.add(recSelect);
gbc.gridx = 2;
gbc.gridy = 0;
frame.add(view);
frame.pack();
JScrollPane catSelect=newjscrollpane();
catSelect.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\uNever);
catSelect.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u根据需要);
JPanel csPanel=新的JPanel();
setLayout(新的GridLayout());
csPanel.setPreferredSize(新尺寸(比例宽度/1972*300,比例高度));
JScrollPane recSelect=新建JScrollPane();
JPanel rsPanel=新的JPanel();
setLayout(新的GridLayout());
rsPanel.setPreferredSize(新尺寸(比例宽度/1792*300,比例高度));
JPanel视图=新的JPanel();
view.setPreferredSize(新维度(scale.width csPanel.getPreferredSize().width rsPanel.getPreferredSize().width,scale.height));
类别dc=空;
对于(int i=0;i
我试图得到一个从左到右相邻的三个元素,但这里得到的只是一个空的(并且大小不正确)窗口。如果我删除整个块,我会得到一个合适的JFrame
,它会填满我的屏幕。如果我直接将类别添加到JFrame
,它们会显示出来,但框架会缩小以包含按钮。如果我添加整个块,我会得到一个空的JFrame
,大约是我屏幕宽度的2/3,高度的4/5。即使是空组件(即视图组件)也必须以全尺寸显示
我不明白为什么在添加JScrollPane
时组件突然消失。我做错了什么
JScrollPane catSelect = new JScrollPane();
...
catSelect.add(csPanel);
不要直接将组件添加到JScrollPanel。可以将单个组件添加到滚动窗格的JViewport
这可以在创建滚动窗格时完成:
JScrollPane catSelect = new JScrollPane( csPanel );
或者,可以使用以下命令动态更新滚动面板的视口:
scrollPane.setViewportView( csPanel );
“我对jbutton进行了Category和Item类扩展,因为这是它们唯一的用途。”使用工厂方法生成它们,不要扩展它们。一般提示:1)为了更快地获得更好的帮助,请添加或。2) 以最小尺寸提供ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则提供更大的宽度和高度,以显示如何使用额外的空间。这确实添加了一个可见的JScrollPane,即第二个滚动窗格recSelect。Jbuttons是不可见的,但是当我添加一个JLabel时,它工作了,JLabel扭曲了屏幕的高度。