7107099: JScrollBar does not show up even if there are enough lebgth of textstring in textField
Reviewed-by: alexp
This commit is contained in:
parent
df18cb7401
commit
942b3e2aae
@ -27,9 +27,7 @@ package javax.swing;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.VolatileImage;
|
||||
import java.awt.peer.ComponentPeer;
|
||||
import java.applet.Applet;
|
||||
import java.beans.Transient;
|
||||
import javax.swing.plaf.ViewportUI;
|
||||
|
||||
@ -265,6 +263,14 @@ public class JViewport extends JComponent implements Accessible
|
||||
*/
|
||||
private boolean hasHadValidView;
|
||||
|
||||
/**
|
||||
* When view is changed we have to synchronize scrollbar values
|
||||
* with viewport (see the BasicScrollPaneUI#syncScrollPaneWithViewport method).
|
||||
* This flag allows to invoke that method while ScrollPaneLayout#layoutContainer
|
||||
* is running.
|
||||
*/
|
||||
private boolean viewChanged;
|
||||
|
||||
/** Creates a <code>JViewport</code>. */
|
||||
public JViewport() {
|
||||
super();
|
||||
@ -830,7 +836,9 @@ public class JViewport extends JComponent implements Accessible
|
||||
backingStoreImage = null;
|
||||
}
|
||||
super.reshape(x, y, w, h);
|
||||
if (sizeChanged) {
|
||||
if (sizeChanged || viewChanged) {
|
||||
viewChanged = false;
|
||||
|
||||
fireStateChanged();
|
||||
}
|
||||
}
|
||||
@ -967,6 +975,8 @@ public class JViewport extends JComponent implements Accessible
|
||||
hasHadValidView = true;
|
||||
}
|
||||
|
||||
viewChanged = true;
|
||||
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
|
104
jdk/test/javax/swing/JViewport/7107099/bug7107099.java
Normal file
104
jdk/test/javax/swing/JViewport/7107099/bug7107099.java
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/* @test
|
||||
@bug 7107099
|
||||
@summary JScrollBar does not show up even if there are enough lebgth of textstring in textField
|
||||
@author Pavel Porvatov
|
||||
*/
|
||||
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class bug7107099 {
|
||||
private static JFrame frame;
|
||||
private static JTextArea textarea;
|
||||
private static JScrollPane scrollPane;
|
||||
|
||||
private static int value;
|
||||
private static int min;
|
||||
private static int max;
|
||||
private static int extent;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
textarea = new JTextArea("before###1###\nbefore###2###\nbefore###3###\nbefore###4###\nbefore###5###\n");
|
||||
|
||||
scrollPane = new JScrollPane(textarea);
|
||||
scrollPane.setPreferredSize(new Dimension(100, 50));
|
||||
|
||||
frame = new JFrame();
|
||||
frame.setLayout(new BorderLayout());
|
||||
frame.setSize(200, 200);
|
||||
frame.add(scrollPane, BorderLayout.SOUTH);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
BoundedRangeModel model = scrollPane.getVerticalScrollBar().getModel();
|
||||
|
||||
value = model.getValue();
|
||||
min = model.getMinimum();
|
||||
max = model.getMaximum();
|
||||
extent = model.getExtent();
|
||||
|
||||
// Do tricky manipulation for testing purpose
|
||||
textarea.setText(null);
|
||||
scrollPane.setViewportView(textarea);
|
||||
textarea.setText("after###1###\nafter###1###\nafter###1###\nafter###1###\nafter###1###\n");
|
||||
textarea.setCaretPosition(0);
|
||||
}
|
||||
});
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
BoundedRangeModel model = scrollPane.getVerticalScrollBar().getModel();
|
||||
|
||||
if (value != model.getValue() ||
|
||||
min != model.getMinimum() ||
|
||||
max != model.getMaximum() ||
|
||||
extent != model.getExtent()) {
|
||||
throw new RuntimeException("Test bug7107099 failed");
|
||||
}
|
||||
|
||||
System.out.println("Test bug7107099 passed");
|
||||
|
||||
frame.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user