Verwenden Sie eine absolute layout innerhalb eines JScrollPane
Ich eine JScrollPane mit absoluter layoute. Ich weiß, dass die Verwendung von setLayout(null) ist nicht zu empfehlen an alle. Ich habe gelesen, dass, wenn Sie verwenden möchten, das absolute layout mit einem JScrollPane ist es notwendig, die bevorzugte Größe, Eigenschaft der Elemente im inneren, um die JScrollPane berechnen Sie seine Größe.
Ich versuche schon die nächste code-ändern der Reihenfolge und Größen von elemnts aber ich kann nicht herausfinden, wo ich war falsch.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class frame extends JFrame {
private JPanel contentPane;
private JScrollPane scrollPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame frame = new frame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public frame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(null);
setContentPane(contentPane);
JPanel panel = new JPanel();
panel.setBackground(Color.red);
panel.setBounds(0,0,600,600);
panel.setPreferredSize(new Dimension(420,280));
scrollPane = new JScrollPane(panel);
scrollPane.setBounds(0, 0, 600, 600);
scrollPane.setLayout(null);
scrollPane.setBackground(Color.green);
scrollPane.add(panel);
scrollPane.setPreferredSize(new Dimension(450,300));
contentPane.add(scrollPane);
}
}
Warum setPreferredSize ist dabei nicht die richtige Arbeit?
Vielen Dank im Voraus.
Siehe auch
a) niemals-jemals eine null-Layout (aka: kein LayoutManager) b) niemals-jemals setXXSize
ScrollPanePaint
.a) niemals-jemals eine null-Layout (aka: kein LayoutManager) b) niemals-jemals setXXSize
InformationsquelleAutor Jonás | 2012-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern der layout-manager der tatsächlichen
JScrollPane
macht keinen Sinn; wenn Sie möchten, verwenden Sie das absolute layout innerhalb Ihrer Anwendung würden Sie in der Regel rufensetLayout(null)
auf eine container-Klasse (wieJPanel
), um die position untergeordneter Komponenten innerhalb es mit absoluter Positionierung.Schlage ich vor, dass Sie versuchen sollten:
setLayout(null)
auf dieJPanel
innerhalb derJScrollPane
(wie ich denke das ist, was Sie zu tun versuchen).JPanel
direkt, Unterklasse und Ihrer Unterklasse implementieren, dieScrollable
- Schnittstelle, die zusätzliche Informationen zu denJScrollPane
bezüglich der optimalen scrollable viewport-Größe.InformationsquelleAutor Adamski
Zunächst nicht ändern Sie den layout-manager des scroll-Bereich ist es nicht erforderlich, für das, was Sie erreichen wollen
Zweite, scroll-Bereich arbeitet obwohl ein
JViewport
. Sie haben, um Ihre container, um es statt (scrollPane.add(panel)
ist die falsche Sache zu tun), stattdessenscrollPane.setViewportView(panel)
Drittens, Sie wollen, werfen Sie einen Blick auf die Scrollbar - Schnittstelle, wie scroll-Bereich nicht nur verlassen sich auf die bevorzugte Größe des Inhalts
InformationsquelleAutor MadProgrammer
Kann ich sehen, Ihr problem.
Legen Sie hier die gebundene und die bevorzugte Größe des Panels.
dann legen Sie die Grenze des scrollPane -
Gut, die Grenzen der Systemsteuerung ist nutzlos, Ursache scrollPane-Komponente kümmert sich nur um die bevorzugte Größe und die bevorzugte Größe des Fensters ist kleiner, dann die bounds der scrollPane-Komponente, so dass der scrollPanel denkt er braucht nicht zu zeigen, alles andere, das ist, warum es zeigt keinen Scrollbalken oder aktivieren Sie Sie.
OBS: ich sehe keinen Sinn bei der Einstellung das layout der scrollPanel. So können Sie überspringen die Linie.
Nur als Kommentar: die Verwendung von Blättern mit absolut layout-Fenster ist nur in Ordnung, da Sie die Pflege der bevorzugte Größe des Fensters.
InformationsquelleAutor Nievinski