public void cascadeWindows() { JInternalFrame[] frames = desktop.getAllFrames(); int x = 0; int y = 0; int width = desktop.getWidth() / 2; int height = desktop.getHeight() / 2; for (int i = 0; i < frames.length; i++) { if (!frames[i].isIcon()) { try { /* try to make maximized frames resizable this might be vetoed */ frames[i].setMaximum(false); frames[i].reshape(x, y, width, height); x += frameDistance; y += frameDistance; // wrap around at the desktop edge if (x + width > desktop.getWidth()) x = 0; if (y + height > desktop.getHeight()) y = 0; } catch(PropertyVetoException e) {} } } } public void tileWindows() { JInternalFrame[] frames = desktop.getAllFrames(); // count frames that aren't iconized int frameCount = 0; for (int i = 0; i < frames.length; i++) { if (!frames[i].isIcon()) frameCount++; } int rows = (int)Math.sqrt(frameCount); int cols = frameCount / rows; int extra = frameCount % rows; // number of columns with an extra row int width = desktop.getWidth() / cols; int height = desktop.getHeight() / rows; int r = 0; int c = 0; for (int i = 0; i < frames.length; i++) { if (!frames[i].isIcon()) { try { frames[i].setMaximum(false); frames[i].reshape(c * width, r * height, width, height); r++; if (r == rows) { r = 0; c++; if (c == cols - extra) { // start adding an extra row rows++; height = desktop.getHeight() / rows; } } } catch(PropertyVetoException e) {} } } } public void selectNextWindow() { JInternalFrame[] frames = desktop.getAllFrames(); for (int i = 0; i < frames.length; i++) { if (frames[i].isSelected()) { /* find next frame that isn't an icon and can be selected */ try { int next = i + 1; while (next != i && frames[next].isIcon()) next++; if (next == i) return; // all other frames are icons or veto selection frames[next].setSelected(true); frames[next].toFront(); return; } catch(PropertyVetoException e) {} } } } public void vetoableChange(PropertyChangeEvent event) throws PropertyVetoException { JInternalFrame iframe = (JInternalFrame)event.getSource(); String name = event.getPropertyName(); Object value = event.getNewValue(); // we only want to check attempts to close a frame if (name.equals("closed") && value.equals(Boolean.TRUE)) { // ask user if it is ok to close int result = JOptionPane.showInternalConfirmDialog(iframe, "OK to close?"); // if the user doesn't agree, veto the close if (result == JOptionPane.CANCEL_OPTION) throw new PropertyVetoException("User canceled close", event); } } public Component createEditorPane(URL u) { // create an editor pane that follows hyperlink clicks JEditorPane editorPane = new JEditorPane(); editorPane.setEditable(false); editorPane.addHyperlinkListener(new HyperlinkListener() { public void hyperlinkUpdate(HyperlinkEvent event) { createInternalFrame(createEditorPane(event.getURL()), event.getURL().toString()); } }); try { editorPane.setPage(u); } catch(IOException e) { editorPane.setText("Error: " + e); } return new JScrollPane(editorPane); } public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == openItem) { // let user select file JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter( new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { String fname = f.getName().toLowerCase(); return fname.endsWith(".html") || fname.endsWith(".htm") || f.isDirectory(); } public String getDescription() { return "HTML Files"; } }); int r = chooser.showOpenDialog(this); if (r == JFileChooser.APPROVE_OPTION) { // open the file that the user selected String filename = chooser.getSelectedFile().getPath(); try { URL fileUrl = new URL("file:" + filename); createInternalFrame(createEditorPane(fileUrl), filename); } catch(MalformedURLException e) { } } } else if (source == exitItem) System.exit(0); else if (source == nextItem) selectNextWindow(); else if (source == cascadeItem) cascadeWindows(); else if (source == tileItem) tileWindows(); else if (source == dragOutlineItem) { desktop.putClientProperty("JDesktopPane.dragMode", dragOutlineItem.isSelected() ? "outline" : null); } } private JDesktopPane desktop; private JMenuItem openItem; private JMenuItem exitItem; private JMenuItem nextItem; private JMenuItem cascadeItem; private JMenuItem tileItem; private JMenuItem dragOutlineItem; private int nextFrameX; private int nextFrameY; private int frameDistance; }
他的子类JTextPane功能更强大
swing中用JTextArea
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
专门处理字体变化(颜色、大小、字体等等)
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
//InternalFrameTest.java
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;public class InternalFrameTest
{ public static void main(String[] args)
{ JFrame frame = new DesktopFrame();
frame.show();
}
}class DesktopFrame extends JFrame
implements ActionListener, VetoableChangeListener
{ public DesktopFrame()
{ setTitle("InternalFrameTest");
setSize(600, 400);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); desktop = new JDesktopPane();
setContentPane(desktop); // set up menus JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
openItem = new JMenuItem("Open");
openItem.addActionListener(this);
fileMenu.add(openItem);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
fileMenu.add(exitItem);
JMenu windowMenu = new JMenu("Window");
menuBar.add(windowMenu);
nextItem = new JMenuItem("Next");
nextItem.addActionListener(this);
windowMenu.add(nextItem);
cascadeItem = new JMenuItem("Cascade");
cascadeItem.addActionListener(this);
windowMenu.add(cascadeItem);
tileItem = new JMenuItem("Tile");
tileItem.addActionListener(this);
windowMenu.add(tileItem);
dragOutlineItem = new JCheckBoxMenuItem("Drag Outline");
dragOutlineItem.addActionListener(this);
windowMenu.add(dragOutlineItem);
} public void createInternalFrame(Component c, String t)
{ JInternalFrame iframe = new JInternalFrame(t,
true, // resizable
true, // closable
true, // maximizable
true); // iconifiable iframe.getContentPane().add(c);
desktop.add(iframe); iframe.setFrameIcon(new ImageIcon("document.gif")); // add listener to confirm frame closing
iframe.addVetoableChangeListener(this); // position frame
int width = desktop.getWidth() / 2;
int height = desktop.getHeight() / 2;
iframe.reshape(nextFrameX, nextFrameY, width, height); iframe.show(); // select the frame--might be vetoed
try
{ iframe.setSelected(true);
}
catch(PropertyVetoException e)
{} /* if this is the first time, compute distance between
cascaded frames
*/ if (frameDistance == 0)
frameDistance = iframe.getHeight()
- iframe.getContentPane().getHeight(); // compute placement for next frame nextFrameX += frameDistance;
nextFrameY += frameDistance;
if (nextFrameX + width > desktop.getWidth())
nextFrameX = 0;
if (nextFrameY + height > desktop.getHeight())
nextFrameY = 0;
}
专门处理字体变化(颜色、大小、字体等等)
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
public void cascadeWindows()
{ JInternalFrame[] frames = desktop.getAllFrames();
int x = 0;
int y = 0;
int width = desktop.getWidth() / 2;
int height = desktop.getHeight() / 2; for (int i = 0; i < frames.length; i++)
{ if (!frames[i].isIcon())
{ try
{ /* try to make maximized frames resizable
this might be vetoed
*/
frames[i].setMaximum(false);
frames[i].reshape(x, y, width, height); x += frameDistance;
y += frameDistance;
// wrap around at the desktop edge
if (x + width > desktop.getWidth()) x = 0;
if (y + height > desktop.getHeight()) y = 0;
}
catch(PropertyVetoException e)
{}
}
}
} public void tileWindows()
{ JInternalFrame[] frames = desktop.getAllFrames(); // count frames that aren't iconized
int frameCount = 0;
for (int i = 0; i < frames.length; i++)
{ if (!frames[i].isIcon())
frameCount++;
} int rows = (int)Math.sqrt(frameCount);
int cols = frameCount / rows;
int extra = frameCount % rows;
// number of columns with an extra row int width = desktop.getWidth() / cols;
int height = desktop.getHeight() / rows;
int r = 0;
int c = 0;
for (int i = 0; i < frames.length; i++)
{ if (!frames[i].isIcon())
{ try
{ frames[i].setMaximum(false);
frames[i].reshape(c * width,
r * height, width, height);
r++;
if (r == rows)
{ r = 0;
c++;
if (c == cols - extra)
{ // start adding an extra row
rows++;
height = desktop.getHeight() / rows;
}
}
}
catch(PropertyVetoException e)
{}
}
}
} public void selectNextWindow()
{ JInternalFrame[] frames = desktop.getAllFrames();
for (int i = 0; i < frames.length; i++)
{ if (frames[i].isSelected())
{ /* find next frame that isn't an icon and can be
selected
*/
try
{ int next = i + 1;
while (next != i && frames[next].isIcon())
next++;
if (next == i) return;
// all other frames are icons or veto selection
frames[next].setSelected(true);
frames[next].toFront();
return;
}
catch(PropertyVetoException e)
{}
}
}
} public void vetoableChange(PropertyChangeEvent event)
throws PropertyVetoException
{ JInternalFrame iframe = (JInternalFrame)event.getSource();
String name = event.getPropertyName();
Object value = event.getNewValue(); // we only want to check attempts to close a frame if (name.equals("closed") && value.equals(Boolean.TRUE))
{ // ask user if it is ok to close
int result
= JOptionPane.showInternalConfirmDialog(iframe,
"OK to close?"); // if the user doesn't agree, veto the close
if (result == JOptionPane.CANCEL_OPTION)
throw new PropertyVetoException("User canceled close",
event);
}
} public Component createEditorPane(URL u)
{ // create an editor pane that follows hyperlink clicks JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.addHyperlinkListener(new HyperlinkListener()
{ public void hyperlinkUpdate(HyperlinkEvent event)
{ createInternalFrame(createEditorPane(event.getURL()),
event.getURL().toString());
}
});
try
{ editorPane.setPage(u);
}
catch(IOException e)
{ editorPane.setText("Error: " + e);
}
return new JScrollPane(editorPane);
} public void actionPerformed(ActionEvent evt)
{ Object source = evt.getSource();
if (source == openItem)
{ // let user select file JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(
new javax.swing.filechooser.FileFilter()
{ public boolean accept(File f)
{ String fname = f.getName().toLowerCase();
return fname.endsWith(".html")
|| fname.endsWith(".htm")
|| f.isDirectory();
}
public String getDescription()
{ return "HTML Files"; }
});
int r = chooser.showOpenDialog(this); if (r == JFileChooser.APPROVE_OPTION)
{ // open the file that the user selected String filename = chooser.getSelectedFile().getPath();
try
{ URL fileUrl = new URL("file:" + filename);
createInternalFrame(createEditorPane(fileUrl),
filename);
}
catch(MalformedURLException e)
{
}
}
}
else if (source == exitItem)
System.exit(0);
else if (source == nextItem)
selectNextWindow();
else if (source == cascadeItem)
cascadeWindows();
else if (source == tileItem)
tileWindows();
else if (source == dragOutlineItem)
{ desktop.putClientProperty("JDesktopPane.dragMode",
dragOutlineItem.isSelected() ? "outline" : null);
}
} private JDesktopPane desktop; private JMenuItem openItem;
private JMenuItem exitItem;
private JMenuItem nextItem;
private JMenuItem cascadeItem;
private JMenuItem tileItem;
private JMenuItem dragOutlineItem; private int nextFrameX;
private int nextFrameY;
private int frameDistance;
}
JTextPane是swing文本组件的卡迪拉克:)
---摘自java2 图形设计卷II Swing技术 p939
如果abcd,如何控制a为黑色,b为红色,c为绿色d为蓝色等。请各们帮忙,告诉我属性,如果100分不够,我在另开帖子送分。
急呀,在线等待
!!!
兜兜风吧
这个可以显示JButton之类的控件,图片,各种颜色的文字,各种字体的文字,各种大小的文字。不过为了显示图片,你要有一个image.gif在当前目录下。import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import java.io.IOException;public class TextSamplerDemo extends JFrame
{
private String newline = "\n"; protected JLabel actionLabel; public TextSamplerDemo() {
//Create a text pane.
JTextPane textPane = createTextPane();
getContentPane().add(new JScrollPane(textPane));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100,100,400,400);
show();
} private JTextPane createTextPane() {
JTextPane textPane = new JTextPane();
String[] initString =
{ "This is an editable JTextPane, ", //regular
"another ", //italic
"styled ", //bold
"text ", //small
"component, ", //large
"which supports embedded components..." + newline,//regular
" " + newline, //button
"...and embedded icons..." + newline, //regular
" ", //icon
newline + "JTextPane is a subclass of JEditorPane that " +
"uses a StyledEditorKit and StyledDocument, and provides " +
"cover methods for interacting with those objects.",
"red","blue","green"
}; String[] initStyles =
{ "regular", "italic", "bold", "small", "large",
"regular", "button", "regular", "icon",
"regular", "red", "blue", "green"
}; initStylesForTextPane(textPane); Document doc = textPane.getDocument(); try {
for (int i=0; i < initString.length; i++) {
doc.insertString(doc.getLength(), initString[i],
textPane.getStyle(initStyles[i]));
}
} catch (BadLocationException ble) {
System.err.println("Couldn't insert initial text.");
} return textPane;
} protected void initStylesForTextPane(JTextPane textPane) {
//Initialize some styles.
Style def = StyleContext.getDefaultStyleContext().
getStyle(StyleContext.DEFAULT_STYLE); Style regular = textPane.addStyle("regular", def);
StyleConstants.setFontFamily(def, "SansSerif"); Style s = textPane.addStyle("italic", regular);
StyleConstants.setItalic(s, true); s = textPane.addStyle("bold", regular);
StyleConstants.setBold(s, true); s = textPane.addStyle("small", regular);
StyleConstants.setFontSize(s, 10); s = textPane.addStyle("large", regular);
StyleConstants.setFontSize(s, 16); s = textPane.addStyle("icon", regular);
StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
StyleConstants.setIcon(s, new ImageIcon("image.gif")); s = textPane.addStyle("button", regular);
StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
JButton button = new JButton("Click Me");
button.setMargin(new Insets(0,0,0,0));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Toolkit.getDefaultToolkit().beep();
}
});
StyleConstants.setComponent(s, button); s = textPane.addStyle("red", regular);
StyleConstants.setFontSize(s, 10);
StyleConstants.setForeground(s, new Color(255, 0, 0)); s = textPane.addStyle("blue", regular);
StyleConstants.setFontSize(s, 10);
StyleConstants.setForeground(s, new Color(0, 0, 255)); s = textPane.addStyle("green", regular);
StyleConstants.setFontSize(s, 10);
StyleConstants.setForeground(s, new Color(0, 255, 0)); }
public static void main(String s[])
{new TextSamplerDemo();}
}