JHelp - Breite des Navigationsbereiches

kodela

Bekanntes Mitglied
Hallo,

weiß jemand, wie man mit JHelp für ein Hilfe-Fenster die Breite des Navigationsbereiches festlegt, prozentual oder mit festem Wert?
Mit jHelp.setNavigatorDisplayed(boolean) kann man festlegen, ob das Hilfe-Fenster mit oder ohne Navigationsbereich angezeigt werden soll. Ich finde jedoch keine Möglichkeit, auf die Breite Einfluss zu nehmen.

kodela
 

mihe7

Top Contributor
OMG - JavaHelp?

1. Sieht nicht gut aus: https://community.oracle.com/thread/1304947?start=0&tstart=0
2. Normalerweise würde ich sagen, einfach den Quellcode anpassen und die Location aus einer System-Property lesen. Aber: das Teil ist ja so alt, das läuft ja noch über Makefiles o_O
3. Man könnte es natürlich auch über NetBeans versuchen.

Was zur Laufzeit auch funktionieren müsste: sich die JSplitPane von der Kompente zu besorgen und dann den Divider einstellen. Du kannst mal versuchen, ob Du mit ((BorderLayout) jHelp.getLayout()).getLayoutComponent(jHelp, BorderLayout.CENTER) die JSplitPane zurückbekommst. Ansonsten musst Du sie halt über jHelp.getComponents() raussuchen.
 

kodela

Bekanntes Mitglied
Danke für die Hinweise. Ich habe mit folgenden Codeschnipseln versucht, die Einstellung der Navigator-Breite zu beeinflussen. Leider vergeblich.
Java:
// Auszüge aus funktionierendem Code
JHelp helpViewer;
...
helpViewer = new JHelp(new HelpSet(cl, url));
helpViewer.setCurrentID(aktID);
...
// mein test mit folgendem Code
Dimension dim = new Dimension();
dim.width = 200;
dim.height = 600;
helpViewer.getCurrentNavigator().setPreferredSize(dim);
// das wird angenommen, was folgende Abfrage bestätigt
int w = helpViewer.getCurrentNavigator().getPreferredSize().width;
// es werden die gesetzten Werte zurück gegeben, sie haben jedoch keine Auswirkung
Ähnlich verläuft es, wenn ich an Stelle von PrefferedSzie die Werte für Size ändere.

Warum wirken sich die von mir gesetzten Einstellungen nicht aus?
 

mihe7

Top Contributor
Java:
        JHelp help = createHelp();
        BorderLayout layout = (BorderLayout) help.getLayout();
        JSplitPane splitPane = (JSplitPane) layout.getLayoutComponent(help, BorderLayout.CENTER);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(help);
        frame.setSize(800, 600);
        frame.setVisible(true);
        SwingUtilities.invokeLater(() -> splitPane.setDividerLocation(50));
 

kodela

Bekanntes Mitglied
Danke, Du bist ein Ass !!!

Jetzt sieht der Aufruf für die Hilfe bei mir so aus:

Java:
    public void zeigePrgInfo(String aktID, boolean naviBereich) {
        JHelp help;
        URL url;
        try {
             // zum Suchen der jhelpset.hs
            ClassLoader cl = Str8tsApp.class.getClassLoader();
            url = HelpSet.findHelpSet(cl, "jhelpset.hs");
            help = new JHelp(new HelpSet(cl, url));
             // jhelpset.hs (definiert die Karteireiter im Hilfefenster)
            if (url == null) {
                JOptionPane.showMessageDialog(strApp,
                        "Das Info-Fenster kann nicht angezeigt werden.\n\n" +
                        "Eine oder mehrere Komponenten wurden nicht gefunden.",
                        "Hinweis", 1);
                return;
            }
        } catch (HeadlessException | HelpSetException | BadIDException ex) {
            JOptionPane.showMessageDialog(null,
                    ex.toString(), "Fehlermeldung", 1);
            return;
        }
        // Darzustellendes Kapitel festlegen, ID muss im XML existieren!
        help.setCurrentID(aktID);
        help.setNavigatorDisplayed(naviBereich);
        help.setFont(new java.awt.Font("Tahoma", 0, 12));
        BorderLayout layout = (BorderLayout) help.getLayout();
        JSplitPane splitPane = (JSplitPane)
                layout.getLayoutComponent(help, BorderLayout.CENTER);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setTitle("kodelasZiffernPuzzle - Infos");
        frame.setIconImage(strApp.getIconImage());
        int xp = strApp.getPosX() - 40;
        int yp = strApp.getPosY() - 50;
        frame.setSize(1045, 725);
        frame.setLocation(xp, yp < 0 ? 0 : yp);
        frame.getContentPane().add(help);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
        SwingUtilities.invokeLater(() -> splitPane.setDividerLocation(240));
    }

Gruß, kodela
 

Ähnliche Java Themen

Neue Themen


Oben