Question about Sun's TextSamplerDemo in tutorial
I've stripped the code of the standard TextSampleDemo.java down to the
bare minimum to demonstrate the problem I'm trying to solve. I want a
button in the toolbar that will turn the selected text in the text pane
to bold when it is clicked. I've been beating my head against this
problem for a couple of days now with no luck.
Any help would be deeply appreciated.
--gary
Here's the code of the stripped down demo with the desired toolbar
button added:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*; //for layout managers and more
import java.awt.event.*; //for action events
public class TextSamplerDemo extends JPanel
implements ActionListener {
private String newline = "\n";
protected static final String textFieldString = "JTextField";
public TextSamplerDemo() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JToolBar toolBar = buildToolbar();
add(toolBar);
//Create a text pane.
JTextPane textPane = createTextPane();
JScrollPane paneScrollPane = new JScrollPane(textPane);
paneScrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
paneScrollPane.setPreferredSize(new Dimension(250, 155));
paneScrollPane.setMinimumSize(new Dimension(10, 10));
add(textPane);
}
public void actionPerformed(ActionEvent e) {
}
private JTextPane createTextPane() {
String[] initString =
{ "This is an editable JTextPane, ",
//regular
"another ",
//italic
"styled ", //bold
"text ", //small
"component, " + newline,
//large
"which supports embedded components..." +
newline,//regular
newline + "JTextPane is a subclass of JEditorPane
that " + newline +
"uses a StyledEditorKit and StyledDocument, and
provides " + newline +
"cover methods for interacting with those objects."
};
String[] initStyles =
{ "regular", "italic", "bold", "small", "large",
"regular", "regular"
};
JTextPane textPane = new JTextPane();
StyledDocument doc = textPane.getStyledDocument();
addStylesToDocument(doc);
try {
for (int i=0; i < initString.length; i++) {
doc.insertString(doc.getLength(), initString[i],
doc.getStyle(initStyles[i]));
}
} catch (BadLocationException ble) {
System.err.println("Couldn't insert initial text into text
pane.");
}
return textPane;
}
protected void addStylesToDocument(StyledDocument doc) {
//Initialize some styles.
Style def = StyleContext.getDefaultStyleContext().
getStyle(StyleContext.DEFAULT_STYLE);
Style regular = doc.addStyle("regular", def);
StyleConstants.setFontFamily(def, "SansSerif");
Style s = doc.addStyle("italic", regular);
StyleConstants.setItalic(s, true);
s = doc.addStyle("bold", regular);
StyleConstants.setBold(s, true);
s = doc.addStyle("small", regular);
StyleConstants.setFontSize(s, 10);
s = doc.addStyle("large", regular);
StyleConstants.setFontSize(s, 16);
}
private JToolBar buildToolbar() {
JToolBar toolBar = new JToolBar();
toolBar.setRollover( true );
toolBar.setFloatable( false );
JButton boldButton = new JButton("Bold");
boldButton.setToolTipText( "Set selected text to bold" );
boldButton.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
// ?????????????????????
// code here to make selected text bold
// ?????????????????????
}
});
toolBar.add( boldButton );
return toolBar;
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("TextSamplerDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new TextSamplerDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}