2015-08-10 5 views
1

Я хотел бы создать программу на Java, что это делается так: What I wantКак создать и использовать JTextPane

окно, содержащее кнопку и компонент (JTextArea, JTextPane и т.д.), которые могут 't быть измененным, в котором появляются некоторые строки, основанные на выполнении некоторой работы. Как видно из рисунка, если задание выполнено успешно, текст будет черным, если будут ошибки, будет отмечен красным.

Мне удалось сделать все правильно, используя JTextArea и JButton, но я обнаружил, что вы не можете изменить цвет строк по строкам.

Я читал, что должен использовать JTextPane, но я не смог его использовать. Вот код, который я написал:

public class Example { 

    public Example() { 
     JFrame frame = new JFrame(); 
     JTextPane pane = new JTextPane(); 
     JButton button = new JButton("Button"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pane.setPreferredSize(new Dimension(200, 200)); 
     frame.add(pane); 
     frame.add(button); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 
} 

При запуске программы, это то, что создано:

enter image description here

Где TextPane?

Кроме того, перед тем, как добавить текст в JTextArea с помощью append(), я не нашел аналогичный метод для JTextPane? Как ты это используешь? Как изменить цвет одной строки?

Я прочитал и увидел и попробовал различные примеры, найденные в Интернете, но я ничего не смог закончить ... Есть примеры, похожие на это?

Извиняюсь за «общий» запрос ...

Благодаря

ответ

3
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextPane; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.Style; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyledDocument; 

public class Example { 

    public Example() { 

     JFrame frame = new JFrame(); 
     JTextPane pane = new JTextPane();; 
     JButton button = new JButton("Button"); 

     addColoredText(pane, "Red Text\n", Color.RED); 
     addColoredText(pane, "Blue Text\n", Color.BLUE); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pane.setPreferredSize(new Dimension(200, 200)); 
     frame.getContentPane().add(pane, BorderLayout.CENTER); 
     frame.getContentPane().add(button, BorderLayout.WEST); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 

    public void addColoredText(JTextPane pane, String text, Color color) { 
     StyledDocument doc = pane.getStyledDocument(); 

     Style style = pane.addStyle("Color Style", null); 
     StyleConstants.setForeground(style, color); 
     try { 
      doc.insertString(doc.getLength(), text, style); 
     } 
     catch (BadLocationException e) { 
      e.printStackTrace(); 
     }   
    } 
} 

Попробуйте этот пример

0

Я бы порекомендовал вам проверить JavaFX, она имеет гораздо более хороший пользовательский интерфейс. Однако вы уже используете JPanel и JButton. Вы можете использовать JLabel для отображения нужного текста и использовать JLabel.setTextFill(Color.WHITESMOKE) для установки цвета текста.

3

Это лучший старт:

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

public class test { 

    public test() throws BadLocationException { 

     JFrame frame = new JFrame(); 
     DefaultStyledDocument document = new DefaultStyledDocument(); 
     JTextPane pane = new JTextPane(document); 
     JPanel mainPanel = new JPanel(); 
     JButton button = new JButton("Button"); 
     button.setPreferredSize(new Dimension(100, 40)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pane.setPreferredSize(new Dimension(200, 200)); 
     mainPanel.add(button); 
     frame.getContentPane().add(pane, BorderLayout.CENTER); 
     frame.getContentPane().add(mainPanel, BorderLayout.WEST); 
     StyleContext context = new StyleContext(); 
     // build a style 
     Style style = context.addStyle("test", null); 
     // set some style properties 
     StyleConstants.setForeground(style, Color.BLACK); 
     document.insertString(0, "Four: success \n", style); 
     StyleConstants.setForeground(style, Color.RED); 
     document.insertString(0, "Three: error \n", style); 
     document.insertString(0, "Two: error \n", style); 

     StyleConstants.setForeground(style, Color.BLACK); 
     // add some data to the document 
     document.insertString(0, "One: success \n", style); 


     // StyleConstants.setForeground(style, Color.blue); 

     frame.pack(); 
     frame.setVisible(true); 

    } 

    public static void main(String[] args) throws BadLocationException { 
     new test(); 
    } 
} 

Это довольно простой, но вы должны получить работу. Вы можете создавать различные методы, когда вам нужно добавлять текст и каскад через цвета.

Смежные вопросы