Hallo zusammen,
folgende Klasse funktioniert als eigenständiges Java-Programm einwandfrei, rufe ich 'Manual' jedoch aus einem laufenden Programm auf, befindet sich der Scroll-Balken bei Initialisierung ca. in der Mitte. Es hängt vermutlich damit zusammen, dass beim Init dem JScrollPane die Größe der TextAreas nicht bekannt ist, habe mit (re)validate und manueller Positionierung des Balkens/ViewPorts erfolglos experimentiert und weiß nun keinen Rat mehr. JScrollBar.getValue() ist übrigens dennoch der Meinung , er stünde bei 0.
Aufgerufen werden soll die Klasse durch ein MenuItem aus einer Instanz, die MenuBar erweitert.
Übrigens bin ich überhaupt nicht versessen auf diese JTextAreas, wenn es eine etwas simplere Variante gäbe, Text mehrzeilig und uneditierbar darzustellen, würd' ick mir freuen.
folgende Klasse funktioniert als eigenständiges Java-Programm einwandfrei, rufe ich 'Manual' jedoch aus einem laufenden Programm auf, befindet sich der Scroll-Balken bei Initialisierung ca. in der Mitte. Es hängt vermutlich damit zusammen, dass beim Init dem JScrollPane die Größe der TextAreas nicht bekannt ist, habe mit (re)validate und manueller Positionierung des Balkens/ViewPorts erfolglos experimentiert und weiß nun keinen Rat mehr. JScrollBar.getValue() ist übrigens dennoch der Meinung , er stünde bei 0.
Aufgerufen werden soll die Klasse durch ein MenuItem aus einer Instanz, die MenuBar erweitert.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
public class testing {
public static void main(String[] args) {
new Manual();
}
static class Manual{
JFrame manualFrame;
public Manual(){
String txt1 = "Vokabeln prägen sich besser ein, wenn sie in unterschiedlichen Situationen und Zusammenhängen gebraucht werden. Bilden Sie Sätze mit ihnen, schreiben Sie einen Text, assoziieren Sie Bilder mit den Vokabeln und lernen Sie sie von beiden Sprachen aus. Lernen sie einmal morgens, mittags und abends, üben und benutzen sie die Vokabeln regelmäßig. Bewahren Sie dennoch einen 'gesunden' Abstand zu ihnen, übertreiben Sie nicht!";
manualFrame = new JFrame("test");
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.lightGray);
centerPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(20,0,20,0);
JLabel header = new JLabel("HEADER");
header.setFont(new Font(Font.SANS_SERIF,Font.BOLD,26));
JLabel header1 = new JLabel("HEADER_SMALL_1");
header1.setFont(new Font(Font.SANS_SERIF,Font.BOLD,20));
JTextArea ta1 = new JTextArea(txt1);
ta1.setEditable(false);
ta1.setLineWrap(true);
ta1.setWrapStyleWord(true);
ta1.setOpaque(false);
JLabel header2 = new JLabel("HEADER_SMALL_2");
header2.setFont(new Font(Font.SANS_SERIF,Font.BOLD,20));
JTextArea ta2 = new JTextArea(txt1);
ta2.setEditable(false);
ta2.setLineWrap(true);
ta2.setWrapStyleWord(true);
ta2.setOpaque(false);
JLabel header3 = new JLabel("HEADER_SMALL_3");
header3.setFont(new Font(Font.SANS_SERIF,Font.BOLD,20));
JTextArea ta3 = new JTextArea(txt1);
ta3.setEditable(false);
ta3.setLineWrap(true);
ta3.setWrapStyleWord(true);
ta3.setOpaque(false);
JPanel buttonPanel = new JPanel();
JButton closeBtn = new JButton("close");
closeBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
manualFrame.dispose();
}
});
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.NONE;
gbc.gridy=1;
centerPanel.add(header,gbc);
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx=1;
gbc.insets = new Insets(0,20,0,0);
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.gridy=2;
centerPanel.add(header1,gbc);
gbc.insets = new Insets(10,20,0,0);
gbc.gridy=3;
centerPanel.add(ta1,gbc);
gbc.insets = new Insets(30,20,0,0);
gbc.gridy=4;
centerPanel.add(header2,gbc);
gbc.insets = new Insets(10,20,0,0);
gbc.gridy=5;
centerPanel.add(ta2,gbc);
gbc.insets = new Insets(30,20,0,0);
gbc.gridy=6;
centerPanel.add(header3,gbc);
gbc.insets = new Insets(10,20,0,0);
gbc.gridy=7;
centerPanel.add(ta3,gbc);
buttonPanel.add(closeBtn);
JScrollPane jsp = new JScrollPane(centerPanel);
jsp.setPreferredSize(new Dimension(400,300));
manualFrame.getContentPane().add(BorderLayout.CENTER,jsp);
manualFrame.getContentPane().add(BorderLayout.SOUTH,buttonPanel);
manualFrame.pack();
manualFrame.setVisible(true);
System.out.println(jsp.getVerticalScrollBar().getValue());
}
}
}
Übrigens bin ich überhaupt nicht versessen auf diese JTextAreas, wenn es eine etwas simplere Variante gäbe, Text mehrzeilig und uneditierbar darzustellen, würd' ick mir freuen.
Zuletzt bearbeitet: