JTextArea wcięcia podczas pisania

0

Do zrobienia wcięć używam czegoś takiego:

textArea.setMargin(new Insets(insetTop, insetLeft, insetBottom, insetRight));

Problem w tym że w czasie pisania, gdy tworzę nowe linie tekst na dole nie ma wcięcia, dochodzi do końca okienka i dopiero scrollem myszy mogę wyrównać wcięcie.

Nie wiem czy będę zrozumiany, także pokażę na przykładzie:

user image

Okienko 1 to normalnie wczytany tekst, z każdej strony jest wcięcie. Okienko 2 to sytuacja gdy piszę. Wcięcie na dole nie jest tworzone, dopiero po skonczeniu pisania gdy przewinę scrollem myszy będzie tak jak w okienku 1.

Co zrobić żeby wcięcia były robione cały czas?

0

Nie wierzę, przed chwila sprawdziłem i działa. Pokaż cały kod ustawiający właściwości JTextArea.

0
textMain = new JTextArea();

textMain.setBackground(customBackgroundColor);
textMain.setForeground(customForegroundColor);
textMain.setMargin(new Insets(insetTop, insetLeft, insetBottom, insetRight));
textMain.setCaretColor(customCaretColor);
textMain.setFont(customFont);
textMain.setLineWrap(true);
textMain.setWrapStyleWord(true);

scrollPane.setViewportView(textMain);
scrollPane.getVerticalScrollBar().setUnitIncrement(scrollSpeed);
scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(0,0));

panelText.setLayout(new BoxLayout(panelText, BoxLayout.X_AXIS));
panelText.add(scrollPane, 0);
scrollPane.setViewportView(textMain);
0

A jaka jest wartość insetBottom?

0

Pominąłem wiersze odwołujące się do nieznanych parametrów i margines na dole jest stale obecny.

import javax.swing.*;
import java.awt.*;

public class Jajo extends JFrame
{
    public static void main(String[] args)
    {
        new Jajo();
    }
    public Jajo()
    {
        JTextArea textMain = new JTextArea();
        textMain.setMargin(new Insets(0,20,20,0));
        textMain.setLineWrap(true);
        textMain.setWrapStyleWord(true);
        JScrollPane scrollPane = new JScrollPane(textMain);
        scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(0,0));
        
        add(scrollPane);

        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);        
    }
}
0

Niestety, ale u mnie to samo co w moim kodzie. Muszę użyć scrolla myszy żeby zrobić wcięcie na końcu :/

0

Jaki system, jaka Java? Ja sprawdzałem na XP i Win 7, oficjalna Java z Oracle.

0

Windows 7 HP
jdk 1.7.0_02
NetBeans 7.1

0

To jeszcze ustalmy co to znaczy, że na dole jest margines.user image
Wg mnie jest, a wg Ciebie?

0

Chodzi mi o coś jakby obwódkę, ramkę wokół jtextarea na której nie ma tekstu - wcięcia z każdej strony.

Tak jak w moim pierwszym poście, normalnie coś takiego istnieje gdy wpisuję pierwsze linijki tekstu. Ale gdy tekstu jest więcej to tylko po lewej i po prawej stronie - na górze tekst dochodzi do krawędzi okna, tak samo na dole, i przewijając scrollem myszy w dół to wcięcie na dole jest robione (ale u góry już nie wiem co zrobić).

Chodzi mi o taką ramkę o określonej wielkości cały czas podczas pisania, myślałem że od tego są insets

0

No i tak to działa, cały czas masz w JTextArea pustą ramkę wokół tekstu. Czy tą ramkę widzisz, czy nie, to zależy od aktualnego położenia JTextArea względem JScrollPane. Jeżeli masz dużo tekstu, to nie ma żadnych szans żeby jednocześnie widzieć ramkę u góry i na dole.

0

Teraz rozumiem.

To szkoda, bo chciałbym pustą przestrzeń wokół jtextarea, pewnie teraz będę musiał kombinować z umieszczaniem jtextarea na środku panelu.

Dzięki wszystkim za zainteresowanie tematem.

0

Ok, już mam rozwiązanie:

panelWKtórymJestTextArea.setBorder(BorderFactory.createMatteborder(góra, lewy, dół, prawy, Color.KolorTłaTextBox));

Teraz są wcięcia z każdej strony na stałe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1