java_swing 中为什么有的组件设置setPreferedsize()不起作用?
将JList放在ScrollPane中,想设置ScrollPane的大小,发现使用setPreferedsize()无法更改?contentPane使用的是BorderLayout
效果如下:
使用setPreferedsize()没有变化,请问如何更改左边区域的大小
代码如下(用windowbuilder生成)
package com.pop1;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.ScrollPaneConstants;
public class List extends JFrame {
private JPanel contentPane;
JLabel label = null;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
List frame = new List();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public List() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
//创建内容窗格
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
//创建JList
String[] model = { "唱歌", "听音乐", "看书", "玩电脑", "踢足球", "唱歌", "听音乐", "看书",
"玩电脑", "踢足球", "唱歌", "听音乐", "看书", "玩电脑", "踢足球" };
JList list = new JList(model);
list.setValueIsAdjusting(true);
//将Jlist放在scrollPane中
JScrollPane scrollPane = new JScrollPane(list);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setPreferredSize(new Dimension(20, 20)); //为什么不起作用?
contentPane.add(scrollPane, BorderLayout.CENTER);
label = new JLabel("\u6CA1\u6709\u4EFB\u4F55\u9009\u62E9");
contentPane.add(label, BorderLayout.EAST);
}
}
回答:
contentPane.add(scrollPane, BorderLayout.CENTER);
把组件加到BorderLayout.CENTER的时候,大小是被托管的,非得加到BorderLayout.CENTER的话,只能改变contentPane的大小。
其它办法就是不指定contentPane的布局。
以上是 java_swing 中为什么有的组件设置setPreferedsize()不起作用? 的全部内容, 来源链接: utcz.com/p/170743.html