JScrollPane在我的Java应用程序中使用时遇到一个小问题.
我有一个JScrollPane包含JPanel.这JPanel是使用可以是任何宽度的按钮(垂直排序)动态更新的.的JPanel自动调整其宽度最大的JButton内部组件.
现在当垂直滚动条出现时,它会占用我右侧的一些空间JPanel,这会导致最大的按钮不能完全显示.除了显示整个按钮之外,我不想使用水平滚动条.
JPanel当滚动条出现时,有没有办法调整我的大小,所以它在我的按钮旁边显示得很好?或者有没有其他方法让滚动条出现在我的旁边JPanel?
提前致谢!
编辑:这是我的问题的演示.当您将窗口调整到较小的高度时,右侧的一小部分按钮会被覆盖.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
/**
* @author Dylan Kiss
*/
public class Demo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame myFrame = new JFrame("Demo");
JPanel sideBar = new JPanel();
JPanel centerPanel = new JPanel(); …Run Code Online (Sandbox Code Playgroud) 简短的版本:我需要做一些棘手的事情来让JDialog的setMaximumSize()起作用吗?
完整版:我有一个JDialog(布局管理器:BorderLayout),它包含一个滚动窗格和底部带有提交按钮的JPanel.
滚动窗格包含一个JPanel,它在系统的其他位置动态构建.
我想要的是对话框在JPanel周围动态调整大小到一定大小,然后开始增长滚动条.这或多或少是默认情况下发生的事情,除了最大尺寸似乎是我的显示器的大小.
我认为这是从java.awt.Component继承的.setMaximumSize()方法,但设置它似乎没有任何影响.
设置首选大小确实有效 - 但是无论如何,对话框总是那么大,这实际上并不是我想要的.
(如果我在滚动窗格上设置最大/首选大小属性,效果是相同的.)
我错过了一些非常明显的东西吗?是否有一些我不知道的古怪的JDialog/BorderLayout/MaximumSize交互?
首先,我必须说我已经检查了这些问题,但没有找到我的答案:
还有很多其他问题
我也检查了这些教程和示例:
和许多其他网站.但我无法解决我的问题.
这是我的代码的简单类型:
public class Question extends JFrame {
public Question() {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLayout(new BorderLayout());
setSize(d.width, d.height);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(d.width, d.height));
panel.setBorder(BorderFactory.createLineBorder(Color.red));
panel.setLayout(new BoxLayout(panel, 1));
for (int i = 0; i < 100; i++) {
panel.add(new JButton("kjdh"));
}
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setPreferredSize(new Dimension(500, 500));
getContentPane().add(scrollPane);
getContentPane().add(panel);
setVisible(true); …Run Code Online (Sandbox Code Playgroud)