resolucion - tamaño de un panel java
JEditorPane dentro de JScrollPane no cambia el tamaño según sea necesario (3)
No es posible disminuir el tamaño de un JEditorPane en un JScrollPane y luego reducirlo. Es posible que desee utilizar un JTextArea en su lugar.
Estoy implementando un recurso de cuadro de comentarios en mi aplicación, que el usuario puede cambiar de tamaño con el mouse. Este cuadro de comentarios contiene un panel de desplazamiento que contiene un JEditorPane
en el que el usuario puede insertar comentarios. He agregado el panel del editor dentro de un panel de desplazamiento por el siguiente motivo:
Cuando el usuario cambia el tamaño del cuadro de comentarios, estoy configurando el tamaño deseado para JScrollPane
y JEditorPane
. Cuando el usuario aumenta el tamaño del cuadro de comentarios, el tamaño de estos componentes aumenta a medida que se desea, pero cuando se reduce el tamaño del cuadro de comentarios, el tamaño del JEditorPane
no disminuye incluso después de establecer el tamaño. Esto lleva a las barras de desplazamiento dentro del panel de desplazamiento.
Intenté usar setPreferrredSize
, setSize
, setMaximumSize
para JEditorPane
. Sin embargo, el tamaño del panel del editor no se reduce. Traté de llamar a revalidate()
o updateUI()
después de establecer el tamaño pero sin uso.
Estoy usando Java 1.4.2.
Por favor, dame algo de información ...
En realidad es posible, luiscubal. Aquí es cómo,
Al JScrollPane agrega un ComponentListener para cambiar el tamaño de los eventos
public static void main(String...args) {
//our test frame
JFrame frame = new JFrame("JEditorPane inside JScrollPane resizing");
frame.setLayout(new BorderLayout());
//our editing pane
final JEditorPane editor = new JEditorPane();
//our simple scroll pane
final JScrollPane scroller = new JScrollPane(editor);
//NOTE: this is the magic that is kind of a workaround
// you can also implement your own type of JScrollPane
// using the JScrollBar and a JViewport which is the
// preferred method of doing something like this the
// other option is to create a JEditorPane subclass that
// implements the Scrollable interface.
scroller.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
editor.setSize(new Dimension(
scroller.getWidth()-20,
scroller.getHeight()-20));
}
});
//just use up the entire frame area.
frame.add(scroller, BorderLayout.CENTER);
//quick and dirty close event handler
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(320, 240); //something not too big
frame.setLocationRelativeTo(null); //centers window on screen
frame.setVisible(true); // normally done in a SwingUtilities.invokeLater
}
Mira luiscubal es posible. No sea tan rápido para anunciar cosas en Java como no sea posible. La aplicación swing es silenciosa y flexible y puede hacer mucho del trabajo por ti. Sin embargo, si usa JComponents de maneras que no fueron hechas para ser utilizadas, terminará con problemas y tendrá dos opciones.
- subclase subclase subclase, básicamente, crea tu propio componente.
- encuentre un trabajo alrededor, como la solución anterior.
Me doy cuenta de que esto ha sido getScrollableTracksViewportWidth()
hace tiempo, pero para referencia futura, todo lo que necesita hacer es anular el getScrollableTracksViewportWidth()
para que siempre sea verdadero, por ejemplo.
JEditorPane pane = new JEditorPane() {
public boolean getScrollableTracksViewportWidth() {
return true;
}
};
panel.add(new JScrollPane(pane));