Java Swing:JscrollPane具有自主内容大小
我有一个带有布局的面板(例如,Java Swing:JscrollPane具有自主内容大小,java,swing,jscrollpane,Java,Swing,Jscrollpane,我有一个带有布局的面板(例如,BorderLayout),其中心有一个JScrollPaneJScrollPane中包含内容(aJPanel) 问题是,当这个JScrollPane调整大小时,我不希望它的内容调整大小。例如,如果布局增加了JScrollPane,我希望它的内容与原来一样小(并且只占据窗格的一部分),但它会调整大小以适应窗格 我还需要一个机会来减少窗格内的内容,并手动增加内容(增加内容没有问题,它们是在减少内容) 那么,如何实现内容大小的独立性呢?当然,如果内容大于JScrollP
BorderLayout
),其中心有一个JScrollPane
JScrollPane
中包含内容(aJPanel
)
问题是,当这个JScrollPane
调整大小时,我不希望它的内容调整大小。例如,如果布局增加了JScrollPane
,我希望它的内容与原来一样小(并且只占据窗格的一部分),但它会调整大小以适应窗格
我还需要一个机会来减少窗格内的内容,并手动增加内容(增加内容没有问题,它们是在减少内容)
那么,如何实现内容大小的独立性呢?当然,如果内容大于JScrollPane
,我需要保存滚动功能
下面是一个简单的例子:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestScroll extends JFrame {
public TestScroll() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500, 500);
init();
}
private void init() {
setLayout(new BorderLayout());
// Inner panel
final JPanel innerPanel = new JPanel();
innerPanel.setOpaque(true);
innerPanel.setBackground(Color.BLUE);
innerPanel.setPreferredSize(new Dimension(200, 200));
// Scroll
final JScrollPane scrollPane = new JScrollPane(innerPanel);
add(scrollPane, BorderLayout.CENTER);
// Buttons
JPanel buttonPanel = new JPanel();
JButton extendButton = new JButton("Extend inner panel");
extendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
innerPanel.setPreferredSize(new Dimension(innerPanel.getWidth() * 2,
innerPanel.getHeight() * 2));
innerPanel.revalidate();
}
});
buttonPanel.add(extendButton);
JButton reduceButton = new JButton("Reduce inner panel");
reduceButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
innerPanel.setPreferredSize(new Dimension(innerPanel.getWidth() / 2,
innerPanel.getHeight() / 2));
innerPanel.revalidate();
}
});
buttonPanel.add(reduceButton);
add(buttonPanel, BorderLayout.NORTH);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TestScroll();
}
});
}
//final JScrollPane scrollPane = new JScrollPane(innerPanel);
JPanel outer = new JPanel();
outer.add( innerPanel );
final JScrollPane scrollPane = new JScrollPane(outer);
}
因此,问题陈述:
你有没有注意到Andrew关于使用布局管理器来实现你的目标的链接 下面是另一个简单的例子:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestScroll extends JFrame {
public TestScroll() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500, 500);
init();
}
private void init() {
setLayout(new BorderLayout());
// Inner panel
final JPanel innerPanel = new JPanel();
innerPanel.setOpaque(true);
innerPanel.setBackground(Color.BLUE);
innerPanel.setPreferredSize(new Dimension(200, 200));
// Scroll
final JScrollPane scrollPane = new JScrollPane(innerPanel);
add(scrollPane, BorderLayout.CENTER);
// Buttons
JPanel buttonPanel = new JPanel();
JButton extendButton = new JButton("Extend inner panel");
extendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
innerPanel.setPreferredSize(new Dimension(innerPanel.getWidth() * 2,
innerPanel.getHeight() * 2));
innerPanel.revalidate();
}
});
buttonPanel.add(extendButton);
JButton reduceButton = new JButton("Reduce inner panel");
reduceButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
innerPanel.setPreferredSize(new Dimension(innerPanel.getWidth() / 2,
innerPanel.getHeight() / 2));
innerPanel.revalidate();
}
});
buttonPanel.add(reduceButton);
add(buttonPanel, BorderLayout.NORTH);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TestScroll();
}
});
}
//final JScrollPane scrollPane = new JScrollPane(innerPanel);
JPanel outer = new JPanel();
outer.add( innerPanel );
final JScrollPane scrollPane = new JScrollPane(outer);
为了更快地获得更好的帮助,请发布一个(最小完整可验证示例)或(简短、自包含、正确的示例)。请参阅两个布局,它们将以内容为中心而不拉伸内容。问题是我允许JScrollPane与父级一起拉伸。我只想保持JScrollPane内容的大小稳定,并能够对其进行更改。问题是,如果没有,帮助您将非常困难。非常感谢!我尝试了很多不同布局的例子,但这个概念很简单,也很有效。