Ele*_*hoy 4 java swing jdialog
简短的版本:我需要做一些棘手的事情来让JDialog的setMaximumSize()起作用吗?
完整版:我有一个JDialog(布局管理器:BorderLayout),它包含一个滚动窗格和底部带有提交按钮的JPanel.
滚动窗格包含一个JPanel,它在系统的其他位置动态构建.
我想要的是对话框在JPanel周围动态调整大小到一定大小,然后开始增长滚动条.这或多或少是默认情况下发生的事情,除了最大尺寸似乎是我的显示器的大小.
我认为这是从java.awt.Component继承的.setMaximumSize()方法,但设置它似乎没有任何影响.
设置首选大小确实有效 - 但是无论如何,对话框总是那么大,这实际上并不是我想要的.
(如果我在滚动窗格上设置最大/首选大小属性,效果是相同的.)
我错过了一些非常明显的东西吗?是否有一些我不知道的古怪的JDialog/BorderLayout/MaximumSize交互?
如调整滚动窗格大小中所述,某些组件可以提供有关设置视口的首选大小的有用信息.该setVisibleRowCount()
方法JList
特别方便,但甚至getViewport().setPreferredSize(…)
可能就足够了.当然,sscce会有所帮助.
附录:作为一个具体的例子,下面的对话框最初的大小为N -2行.随着越来越多的被添加,该对话框增长,直到数量达到Ñ.此时,滚动条开始"增长".该示例使用a JList
,但任何Scrollable
组件都应该是可适应的.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/** @see http://stackoverflow.com/questions/5759131 */
public class ListDialog {
private static final int N = 12;
private JDialog dlg = new JDialog();
private DefaultListModel model = new DefaultListModel();
private JList list = new JList(model);
private JScrollPane sp = new JScrollPane(list);
private int count;
public ListDialog() {
JPanel panel = new JPanel();
panel.add(new JButton(new AbstractAction("Add") {
@Override
public void actionPerformed(ActionEvent e) {
append();
if (count <= N) {
list.setVisibleRowCount(count);
dlg.pack();
}
}
}));
for (int i = 0; i < N - 2; i++) {
this.append();
}
list.setVisibleRowCount(N - 2);
dlg.add(sp, BorderLayout.CENTER);
dlg.add(panel, BorderLayout.SOUTH);
dlg.pack();
dlg.setLocationRelativeTo(null);
dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dlg.setVisible(true);
}
private void append() {
model.addElement("String " + String.valueOf(++count));
list.ensureIndexIsVisible(count - 1);
}
public static void main(String[] a_args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ListDialog pd = new ListDialog();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
使面板imlement Scrollable是要走的路.另请参阅(除了已提供的Trashgod教程链接)Rob的博客条目
http://tips4java.wordpress.com/2009/12/20/scrollable-panel/
然后:
1)以典型内容合理的方式实现getPreferredScrollableViewportSize()(对于要显示的首选行数的JList fi,也就是:visibleRowCount)
2)为那些"合理的术语"实现setter/getters
这个附加层(协调"合理的术语")允许所有协作组件尽最大努力提出强大的大小提示,而不会像setXXSize那样产生不友好的干扰(这是一个不容忽视的,只是忘记那些方法存在;)
归档时间: |
|
查看次数: |
13572 次 |
最近记录: |