看标题就知道了。我试图将组件方向更改为
编辑
这是一个例子:
我们有一个带有的。在内部,我们放置一个。现在将的首选大小设置为比窄。 仍将占据上的所有空间。现在更改的方向为
示例代码(更改的方向以查看差异):
RIGHT_TO_LEFT
,但这会导致意外的副作用 - 它与指定首选大小的组件表现得很奇怪。(JDK 1.6.0_23,Eclipse VE)编辑
这是一个例子:
我们有一个带有的。在内部,我们放置一个。现在将的首选大小设置为比窄。 仍将占据上的所有空间。现在更改的方向为
RIGHT_TO_LEFT
,看看会发生什么。示例代码(更改的方向以查看差异):
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class TestFrame extends JFrame {
private JPanel jContentPane = null;
private JScrollPane jMainScrollPane = null;
private JPanel jMainPanel = null;
public TestFrame(){
super();
initialize();
}
private void initialize(){
this.setSize(480, 339);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane(){
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJMainScrollPane(), BorderLayout.CENTER);
}
return jContentPane;
}
private JScrollPane getJMainScrollPane(){
if (jMainScrollPane == null) {
jMainScrollPane = new JScrollPane();
jMainScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jMainScrollPane.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
jMainScrollPane.setViewportView(getJMainPanel());
}
return jMainScrollPane;
}
private JPanel getJMainPanel(){
if (jMainPanel == null) {
jMainPanel = new JPanel();
jMainPanel.setLayout(new BorderLayout());
jMainPanel.setPreferredSize(new Dimension(30, 30));
}
return jMainPanel;
}
}
编辑2
由于这个问题的奇怪性质,我已向Oracle提交了一个错误报告。他们给我发送了一个错误链接
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7038455
目前还没有这样的错误 - 我想,正在检查中。
但是,问题仍然存在 - 是否有解决方法或其他方式?
JScrollPane
,主要的一个是查看jMainPanel
,第二个则没有任何作用。为什么你要这样设计呢?如果你的意图是为了触发jMainPanel
的垂直滚动条,你只需要使用JMainPanel.setPreferredSize(new Dimension(500, 400));
,并且删除我看不出有任何作用的第二个JScrollPane
。 - eee