
import java.awt.Component
import java.awt.Container
import java.awt.Dimension
import java.awt.Insets
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.AbstractAction
import javax.swing.JButton
import javax.swing.JComponent
import javax.swing.JFrame
import javax.swing.JMenuItem
import javax.swing.JPopupMenu
import javax.swing.JSeparator
import javax.swing.JToggleButton
import javax.swing.JToolBar
public class DvaToolbarLayout implements java.awt.LayoutManager {
private JPopupMenu popupMenu = new JPopupMenu()
private JButton popupButton = new JButton(new PopupAction())
public DvaToolbarLayout() {
popupButton.setName("BTN_POPUP")
}
public void addLayoutComponent(String name, Component comp) {
}
public void layoutContainer(Container parent) {
if (parent.isVisible()) {
// Position all buttons in the container
Insets insets = parent.getInsets()
int x = insets.left
int y = insets.top
int spaceUsed = insets.right + insets.left
for (int i = 0i <parent.getComponentCount()i++) {
Component aComponent = parent.getComponent(i)
aComponent.setSize(aComponent.getPreferredSize())
aComponent.setLocation(x, y)
int componentWidth = aComponent.getPreferredSize().width
x += componentWidth
spaceUsed += componentWidth
}
// All the buttons won't fit, add extender button
// Note: the size of the extender button changes once it is added
// to the container. Add it here so correct width is used.
int parentWidth = parent.getSize().width
if (spaceUsed >parentWidth) {
popupMenu.removeAll()
parent.add(popupButton)
popupButton.setSize(popupButton.getPreferredSize())
int popupX = parentWidth - insets.right - popupButton.getSize().width
popupButton.setLocation(popupX, y)
spaceUsed += popupButton.getSize().width
}
// Remove buttons that don't fit and add to the popup menu
int lastVisibleButtonIndex = 1
while (spaceUsed >parentWidth) {
lastVisibleButtonIndex++
int last = parent.getComponentCount() - lastVisibleButtonIndex
Component component = parent.getComponent(last)
component.setVisible(false)
spaceUsed -= component.getSize().width
addComponentToPopup(component)
}
}
}
private void addComponentToPopup(Component component) {
if (component instanceof JButton) {
JButton button = (JButton) component
JMenuItem menuItem = new JMenuItem(button.getText())
menuItem.setIcon(button.getIcon())
menuItem.setToolTipText(button.getToolTipText())
ActionListener[] listeners = button.getActionListeners()
for (int i = 0i <listeners.lengthi++) {
menuItem.addActionListener(listeners[i])
}
popupMenu.insert(menuItem, 0)
}
if (component instanceof JToggleButton) {
JToggleButton button = (JToggleButton) component
JMenuItem menuItem = new JMenuItem(button.getText())
menuItem.setIcon(button.getIcon())
menuItem.setToolTipText(button.getToolTipText())
ActionListener[] listeners = button.getActionListeners()
for (int i = 0i <listeners.lengthi++) {
menuItem.addActionListener(listeners[i])
}
popupMenu.insert(menuItem, 0)
}
if (component instanceof JToolBar.Separator) {
popupMenu.insert(new JSeparator(), 0)
}
}
/**
* Calculates the minimum size dimensions for the specified
* container, given the components it contains.
* @param parent the component to be laid out
* @see #preferredLayoutSize
*/
public Dimension minimumLayoutSize(Container parent) {
return popupButton.getMinimumSize()
}
/** Calculates the preferred size dimensions for the specified
* container, given the components it contains.
* @param parent the container to be laid out
*
* @see #minimumLayoutSize
*/
public Dimension preferredLayoutSize(Container parent) {
// Move all components to the container and remove the extender button
parent.remove(popupButton)
// Calculate the width of all components in the container
Dimension d = new Dimension()
d.width += parent.getInsets().right + parent.getInsets().left
for (int i = 0i <parent.getComponents().lengthi++) {
Component component = parent.getComponent(i)
component.setVisible(true)
d.width += component.getPreferredSize().width
d.height = Math.max(d.height, component.getPreferredSize().height)
}
d.height += parent.getInsets().top + parent.getInsets().bottom + 5
return d
}
/** Removes the specified component from the layout.
* @param comp the component to be removed
*/
public void removeLayoutComponent(Component comp) {
}
protected class PopupAction extends AbstractAction {
public PopupAction() {
super(">>")
}
public void actionPerformed(ActionEvent e) {
JComponent component = (JComponent) e.getSource()
popupMenu.show(component, 0, component.getHeight())
}
}
public static void main(String[] argv) {
ActionListener simpleAction = new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
}
JToolBar toolBar = new JToolBar()
toolBar.setLayout(new DvaToolbarLayout())
toolBar.add(createButton("one", simpleAction))
toolBar.add(createButton("two", simpleAction))
toolBar.add(createButton("three", simpleAction))
toolBar.add(createButton("four", simpleAction))
toolBar.add(createButton("five", simpleAction))
toolBar.add(createButton("six", simpleAction))
toolBar.addSeparator()
toolBar.add(createButton("seven", simpleAction))
toolBar.add(createButton("eight", simpleAction))
toolBar.addSeparator()
toolBar.add(createButton("nine", simpleAction))
toolBar.add(createButton("ten", simpleAction))
JFrame f = new JFrame()
f.getContentPane().setLayout(new BorderLayout())
f.getContentPane().add(toolBar, BorderLayout.NORTH)
f.setBounds(300, 200, 400, 300)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
f.setVisible(true)
}
private static JButton createButton(String text, ActionListener listener) {
JButton button = new JButton(text)
button.addActionListener(listener)
return button
}
}
很接近你的要去
你说的不就是一个记事本吗,
//import java packages
import java.awt.*
import java.awt.event.*
import java.text.*
import java.util.*
import java.io.*
import javax.swing.undo.*
import javax.swing.border.*
import javax.swing.*
import javax.swing.text.*
import javax.swing.event.*
import java.awt.datatransfer.*
public class Notepad extends JFrame implements ActionListener,DocumentListener{
//定义变量
//菜单
JMenu fileMenu,editMenu,formatMenu,viewMenu,helpMenu
//"文件"的菜单项
JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_PageSetup,fileMenu_Print,fileMenu_Exit
//"编辑"的菜单项
JMenuItem editMenu_Undo,editMenu_Redo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,editMenu_FindNext,editMenu_Replace,
editMenu_GoTo,editMenu_SelectAll,editMenu_TimeDate
//"格式"的菜单项
JCheckBoxMenuItem formatMenu_LineWrap
JMenu formatMenu_Color
JMenuItem formatMenu_Font,formatMenu_Color_FgColor,formatMenu_Color_BgColor
//"查看"的菜单项
JCheckBoxMenuItem viewMenu_Status
//"帮助"的菜单项
JMenuItem helpMenu_HelpTopics,helpMenu_About
//文本编辑区域
JTextArea editArea
//状态栏标签
JLabel statusLabel
//d出菜单及菜单项
JPopupMenu popupMenu
JMenuItem popupMenu_Undo,popupMenu_Redo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll
//系统剪贴板
Toolkit toolKit=Toolkit.getDefaultToolkit()
Clipboard clipBoard=toolKit.getSystemClipboard()
//其它变量
boolean isNewFile=true//是否新文件(未保存过的)
File currentFile //当前文件名
String oldValue //存放编辑区原来的内容,用于比较文本是否有改动
JButton fontOkButton//字体设置里的"确定"按钮
//工具栏按钮
JButton newButton,openButton,saveButton,saveAsButton,printButton,undoButton,redoButton,
cutButton,copyButton,pasteButton,deleteButton,searchButton,timeButton,fontButton,
boldButton,italicButton,fgcolorButton,bgcolorButton,helpButton
//创建撤消 *** 作管理器
protected UndoManager undo = new UndoManager()
protected UndoableEditListener undoHandler = new UndoHandler()
//设置编辑区默认字体
protected Font defaultFont=new Font("宋体",Font.PLAIN,12)
//构造函数开始
public Notepad()
{
super("黄斌的记事本")
//获取容器
Container container=getContentPane()
//创建菜单条
JMenuBar menuBar = new JMenuBar()
//创建文件菜单及菜单项并注册事件监听
JMenu fileMenu = new JMenu("文件(F)", true)
fileMenu.setMnemonic('F')
fileMenu_New = new JMenuItem("新建(N)", 'N')
fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK))
fileMenu_New.addActionListener(this)
fileMenu_Open = new JMenuItem("打开(O)...", 'O')
fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK))
fileMenu_Open.addActionListener(this)
fileMenu_Save = new JMenuItem("保存(S)", 'S')
fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK))
fileMenu_Save.addActionListener(this)
fileMenu_SaveAs = new JMenuItem("另存为(A)...", 'A')
fileMenu_SaveAs.addActionListener(this)
fileMenu_PageSetup = new JMenuItem("页面设置(U)...",'U')
fileMenu_PageSetup.addActionListener(this)
fileMenu_Print = new JMenuItem("打印(P)...", 'P')
fileMenu_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK))
fileMenu_Print.addActionListener(this)
fileMenu_Exit = new JMenuItem("退出(X)",'X')
fileMenu_Exit.addActionListener(this)
//创建编辑菜单及菜单项并注册事件监听
JMenu editMenu = new JMenu("编辑(E)", true)
editMenu.setMnemonic('E')
editMenu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){
checkMenuItemEnabled()//设置剪切、复制、粘贴、删除等功能的可用性
}
}
)
editMenu_Undo = new JMenuItem("撤消(U)",'U')
editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK))
editMenu_Undo.addActionListener(this)
editMenu_Undo.setEnabled(false)
editMenu_Redo = new JMenuItem("重做(R)",'R')
editMenu_Redo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,InputEvent.CTRL_MASK))
editMenu_Redo.addActionListener(this)
editMenu_Redo.setEnabled(false)
editMenu_Cut = new JMenuItem("剪切(T)",'T')
editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK))
editMenu_Cut.addActionListener(this)
editMenu_Copy = new JMenuItem("复制(C)",'C')
editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK))
editMenu_Copy.addActionListener(this)
editMenu_Paste = new JMenuItem("粘贴(P)",'P')
editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK))
editMenu_Paste.addActionListener(this)
editMenu_Delete = new JMenuItem("删除(L)",'L')
editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0))
editMenu_Delete.addActionListener(this)
editMenu_Find = new JMenuItem("查找(F)...",'F')
editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK))
editMenu_Find.addActionListener(this)
editMenu_FindNext = new JMenuItem("查找下一个(N)",'N')
editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0))
editMenu_FindNext.addActionListener(this)
editMenu_Replace = new JMenuItem("替换(R)...",'R')
editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK))
editMenu_Replace.addActionListener(this)
editMenu_GoTo = new JMenuItem("转到(G)...",'G')
editMenu_GoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK))
editMenu_GoTo.addActionListener(this)
editMenu_SelectAll = new JMenuItem("全选",'A')
editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK))
editMenu_SelectAll.addActionListener(this)
editMenu_TimeDate = new JMenuItem("时间/日期(D)",'D')
editMenu_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0))
editMenu_TimeDate.addActionListener(this)
//创建格式菜单及菜单项并注册事件监听
JMenu formatMenu = new JMenu("格式(O)", true)
formatMenu.setMnemonic('O')
formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)")
formatMenu_LineWrap.setMnemonic('W')
formatMenu_LineWrap.setState(true)
formatMenu_LineWrap.addActionListener(this)
formatMenu_Font = new JMenuItem("字体(F)...",'F')
formatMenu_Font.addActionListener(this)
formatMenu_Color = new JMenu("设置颜色")
formatMenu_Color_FgColor=new JMenuItem("字体颜色")
formatMenu_Color_FgColor.addActionListener(this)
formatMenu_Color_BgColor=new JMenuItem("背景颜色")
formatMenu_Color_BgColor.addActionListener(this)
//创建查看菜单及菜单项并注册事件监听
JMenu viewMenu = new JMenu("查看(V)", true)
viewMenu.setMnemonic('V')
viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)")
viewMenu_Status.setMnemonic('S')
viewMenu_Status.setState(true)
viewMenu_Status.addActionListener(this)
//创建帮助菜单及菜单项并注册事件监听
JMenu helpMenu = new JMenu("帮助(H)", true)
helpMenu.setMnemonic('H')
helpMenu_HelpTopics = new JMenuItem("帮助主题(H)",'H')
helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0))
helpMenu_HelpTopics.addActionListener(this)
helpMenu_About = new JMenuItem("关于记事本(A)",'A')
helpMenu_About.addActionListener(this)
//向菜单条添加"文件"菜单及菜单项
menuBar.add(fileMenu)
fileMenu.add(fileMenu_New)
fileMenu.add(fileMenu_Open)
fileMenu.add(fileMenu_Save)
fileMenu.add(fileMenu_SaveAs)
fileMenu.addSeparator() //分隔线
fileMenu.add(fileMenu_PageSetup)
fileMenu.add(fileMenu_Print)
fileMenu.addSeparator() //分隔线
fileMenu.add(fileMenu_Exit)
//向菜单条添加"编辑"菜单及菜单项
menuBar.add(editMenu)
editMenu.add(editMenu_Undo)
editMenu.add(editMenu_Redo)
editMenu.addSeparator() //分隔线
editMenu.add(editMenu_Cut)
editMenu.add(editMenu_Copy)
editMenu.add(editMenu_Paste)
editMenu.add(editMenu_Delete)
editMenu.addSeparator() //分隔线
editMenu.add(editMenu_Find)
editMenu.add(editMenu_FindNext)
editMenu.add(editMenu_Replace)
editMenu.add(editMenu_GoTo)
editMenu.addSeparator() //分隔线
editMenu.add(editMenu_SelectAll)
editMenu.add(editMenu_TimeDate)
//向菜单条添加"格式"菜单及菜单项
menuBar.add(formatMenu)
formatMenu.add(formatMenu_LineWrap)
formatMenu.add(formatMenu_Font)
formatMenu.addSeparator()
formatMenu.add(formatMenu_Color)
formatMenu_Color.add(formatMenu_Color_FgColor)
formatMenu_Color.add(formatMenu_Color_BgColor)
//向菜单条添加"查看"菜单及菜单项
menuBar.add(viewMenu)
viewMenu.add(viewMenu_Status)
//向菜单条添加"帮助"菜单及菜单项
menuBar.add(helpMenu)
helpMenu.add(helpMenu_HelpTopics)
helpMenu.addSeparator()
helpMenu.add(helpMenu_About)
//向窗口添加菜单条
this.setJMenuBar(menuBar)
//创建文本编辑区并添加滚动条
editArea=new JTextArea(20,50)
JScrollPane scroller=new JScrollPane(editArea)
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)
container.add(scroller,BorderLayout.CENTER)//向容器添加文本编辑区
editArea.setWrapStyleWord(true) //设置单词在一行不足容纳时换行
editArea.setLineWrap(true)//设置文本编辑区自动换行默认为true,即会"自动换行"
editArea.setFont(defaultFont) //设置编辑区默认字体
editArea.setBackground(Color.white) //设置编辑区默认背景色
editArea.setForeground(Color.black) //设置编辑区默认前景色
oldValue=editArea.getText() //获取原文本编辑区的内容
//编辑区注册事件监听
editArea.getDocument().addUndoableEditListener(undoHandler)
editArea.getDocument().addDocumentListener(this)
//创建右键d出菜单
popupMenu=new JPopupMenu()
popupMenu_Undo=new JMenuItem("撤消(U)",'U')
popupMenu_Redo=new JMenuItem("重做(R)",'R')
popupMenu_Cut =new JMenuItem("剪切(T)",'T')
popupMenu_Copy=new JMenuItem("复制(C)",'C')
popupMenu_Paste=new JMenuItem("粘贴(P)",'P')
popupMenu_Delete=new JMenuItem("删除(D)",'D')
popupMenu_SelectAll=new JMenuItem("全选(A)",'A')
popupMenu_Undo.setEnabled(false) //撤消选项初始设为不可用
popupMenu_Redo.setEnabled(false) //重做选项初始设为不可用
//向右键菜单添加菜单项和分隔符
popupMenu.add(popupMenu_Undo)
popupMenu.add(popupMenu_Redo)
popupMenu.addSeparator()
popupMenu.add(popupMenu_Cut)
popupMenu.add(popupMenu_Copy)
popupMenu.add(popupMenu_Paste)
popupMenu.add(popupMenu_Delete)
popupMenu.addSeparator()
popupMenu.add(popupMenu_SelectAll)
//右键菜单注册事件
popupMenu_Undo.addActionListener(this)
popupMenu_Redo.addActionListener(this)
popupMenu_Cut.addActionListener(this)
popupMenu_Copy.addActionListener(this)
popupMenu_Paste.addActionListener(this)
popupMenu_Delete.addActionListener(this)
popupMenu_SelectAll.addActionListener(this)
//文本编辑区注册右键菜单事件
editArea.addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e)
{
checkForTriggerEvent(e)
}
public void mouseReleased(MouseEvent e)
{
checkForTriggerEvent(e)
}
private void checkForTriggerEvent(MouseEvent e)
{
if(e.isPopupTrigger())
popupMenu.show(e.getComponent(),e.getX(),e.getY())
checkMenuItemEnabled() //设置剪切、复制、粘贴、删除等功能的可用性
editArea.requestFocus()//编辑区获取焦点
}
})
//创建工具栏
JPanel toolBar=new JPanel()
toolBar.setLayout(new FlowLayout(FlowLayout.LEFT))
Icon newIcon=new ImageIcon("Icons/new.gif")
Icon openIcon=new ImageIcon("Icons/open.gif")
Icon saveIcon=new ImageIcon("Icons/save.gif")
Icon saveAsIcon=new ImageIcon("Icons/saveas.gif")
Icon printIcon=new ImageIcon("Icons/print.gif")
Icon undoIcon=new ImageIcon("Icons/undo.gif")
Icon redoIcon=new ImageIcon("Icons/redo.gif")
Icon cutIcon=new ImageIcon("Icons/cut.gif")
Icon copyIcon=new ImageIcon("Icons/copy.gif")
Icon pasteIcon=new ImageIcon("Icons/paste.gif")
Icon deleteIcon=new ImageIcon("Icons/delete.gif")
Icon searchIcon=new ImageIcon("Icons/search.gif")
Icon timeIcon=new ImageIcon("Icons/time.gif")
Icon fontIcon=new ImageIcon("Icons/font.gif")
Icon boldIcon=new ImageIcon("Icons/bold.gif")
Icon italicIcon=new ImageIcon("Icons/italic.gif")
Icon bgcolorIcon=new ImageIcon("Icons/bgcolor.gif")
Icon fgcolorIcon=new ImageIcon("Icons/fgcolor.gif")
Icon helpIcon=new ImageIcon("Icons/help.gif")
newButton= new JButton(newIcon)
openButton=new JButton(openIcon)
saveButton= new JButton(saveIcon)
saveAsButton=new JButton(saveAsIcon)
printButton=new JButton(printIcon)
undoButton=new JButton(undoIcon)
undoButton.setEnabled(false)
redoButton=new JButton(redoIcon)
redoButton.setEnabled(false)
cutButton=new JButton(cutIcon)
cutButton.setEnabled(false)
copyButton=new JButton(copyIcon)
copyButton.setEnabled(false)
pasteButton=new JButton(pasteIcon)
pasteButton.setEnabled(false)
deleteButton=new JButton(deleteIcon)
deleteButton.setEnabled(false)
searchButton=new JButton(searchIcon)
timeButton=new JButton(timeIcon)
fontButton=new JButton(fontIcon)
boldButton=new JButton(boldIcon)
italicButton=new JButton(italicIcon)
fgcolorButton=new JButton(fgcolorIcon)
bgcolorButton=new JButton(bgcolorIcon)
helpButton=new JButton(helpIcon)
newButton.setPreferredSize(new Dimension(22,22))
openButton.setPreferredSize(new Dimension(22,22))
saveButton.setPreferredSize(new Dimension(22,22))
saveAsButton.setPreferredSize(new Dimension(22,22))
printButton.setPreferredSize(new Dimension(22,22))
undoButton.setPreferredSize(new Dimension(22,22))
redoButton.setPreferredSize(new Dimension(22,22))
cutButton.setPreferredSize(new Dimension(22,22))
copyButton.setPreferredSize(new Dimension(22,22))
pasteButton.setPreferredSize(new Dimension(22,22))
deleteButton.setPreferredSize(new Dimension(22,22))
searchButton.setPreferredSize(new Dimension(22,22))
timeButton.setPreferredSize(new Dimension(22,22))
fontButton.setPreferredSize(new Dimension(22,22))
boldButton.setPreferredSize(new Dimension(22,22))
italicButton.setPreferredSize(new Dimension(22,22))
fgcolorButton.setPreferredSize(new Dimension(22,22))
bgcolorButton.setPreferredSize(new Dimension(22,22))
helpButton.setPreferredSize(new Dimension(22,22))
//注册工具栏按钮事件
newButton.addActionListener(this)
openButton.addActionListener(this)
saveButton.addActionListener(this)
saveAsButton.addActionListener(this)
printButton.addActionListener(this)
undoButton.addActionListener(this)
redoButton.addActionListener(this)
cutButton.addActionListener(this)
copyButton.addActionListener(this)
pasteButton.addActionListener(this)
deleteButton.addActionListener(this)
searchButton.addActionListener(this)
timeButton.addActionListener(this)
fontButton.addActionListener(this)
boldButton.addActionListener(this)
italicButton.addActionListener(this)
fgcolorButton.addActionListener(this)
bgcolorButton.addActionListener(this)
helpButton.addActionListener(this)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)