📄 util.java
字号:
}
return new String (data);
} // initCap
/**************************************************************************
* Return a Iterator with only the relevant attributes.
* Fixes implementation in AttributedString, which returns everything
* @param aString attributed string
* @param relevantAttributes relevant attributes
* @return iterator
*/
static public AttributedCharacterIterator getIterator (AttributedString aString,
AttributedCharacterIterator.Attribute[] relevantAttributes)
{
AttributedCharacterIterator iter = aString.getIterator();
Set set = iter.getAllAttributeKeys();
// System.out.println("AllAttributeKeys=" + set);
if (set.size() == 0)
return iter;
// Check, if there are unwanted attributes
Set<AttributedCharacterIterator.Attribute> unwanted = new HashSet<AttributedCharacterIterator.Attribute>(iter.getAllAttributeKeys());
for (int i = 0; i < relevantAttributes.length; i++)
unwanted.remove(relevantAttributes[i]);
if (unwanted.size() == 0)
return iter;
// Create new String
StringBuffer sb = new StringBuffer();
for (char c = iter.first(); c != AttributedCharacterIterator.DONE; c = iter.next())
sb.append(c);
aString = new AttributedString(sb.toString());
// copy relevant attributes
Iterator it = iter.getAllAttributeKeys().iterator();
while (it.hasNext())
{
AttributedCharacterIterator.Attribute att = (AttributedCharacterIterator.Attribute)it.next();
if (!unwanted.contains(att))
{
for (char c = iter.first(); c != AttributedCharacterIterator.DONE; c = iter.next())
{
Object value = iter.getAttribute(att);
if (value != null)
{
int start = iter.getRunStart(att);
int limit = iter.getRunLimit(att);
// System.out.println("Attribute=" + att + " Value=" + value + " Start=" + start + " Limit=" + limit);
aString.addAttribute(att, value, start, limit);
iter.setIndex(limit);
}
}
}
// else
// System.out.println("Unwanted: " + att);
}
return aString.getIterator();
} // getIterator
/**
* Dump a Map (key=value) to out
* @param map Map
*/
static public void dump (Map map)
{
System.out.println("Dump Map - size=" + map.size());
Iterator it = map.keySet().iterator();
while (it.hasNext())
{
Object key = it.next();
Object value = map.get(key);
System.out.println(key + "=" + value);
}
} // dump (Map)
/**
* Print Action and Input Map for component
* @param comp Component with ActionMap
*/
public static void printActionInputMap (JComponent comp)
{
// Action Map
ActionMap am = comp.getActionMap();
Object[] amKeys = am.allKeys(); // including Parents
if (amKeys != null)
{
System.out.println("-------------------------");
System.out.println("ActionMap for Component " + comp.toString());
for (int i = 0; i < amKeys.length; i++)
{
Action a = am.get(amKeys[i]);
StringBuffer sb = new StringBuffer("- ");
sb.append(a.getValue(Action.NAME));
if (a.getValue(Action.ACTION_COMMAND_KEY) != null)
sb.append(", Cmd=").append(a.getValue(Action.ACTION_COMMAND_KEY));
if (a.getValue(Action.SHORT_DESCRIPTION) != null)
sb.append(" - ").append(a.getValue(Action.SHORT_DESCRIPTION));
System.out.println(sb.toString() + " - " + a);
}
}
/** Same as below
KeyStroke[] kStrokes = comp.getRegisteredKeyStrokes();
if (kStrokes != null)
{
System.out.println("-------------------------");
System.out.println("Registered Key Strokes - " + comp.toString());
for (int i = 0; i < kStrokes.length; i++)
{
System.out.println("- " + kStrokes[i].toString());
}
}
/** Focused */
InputMap im = comp.getInputMap(JComponent.WHEN_FOCUSED);
KeyStroke[] kStrokes = im.allKeys();
if (kStrokes != null)
{
System.out.println("-------------------------");
System.out.println("InputMap for Component When Focused - " + comp.toString());
for (int i = 0; i < kStrokes.length; i++)
{
System.out.println("- " + kStrokes[i].toString() + " - "
+ im.get(kStrokes[i]).toString());
}
}
/** Focused in Window */
im = comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
kStrokes = im.allKeys();
if (kStrokes != null)
{
System.out.println("-------------------------");
System.out.println("InputMap for Component When Focused in Window - " + comp.toString());
for (int i = 0; i < kStrokes.length; i++)
{
System.out.println("- " + kStrokes[i].toString() + " - "
+ im.get(kStrokes[i]).toString());
}
}
/** Focused when Ancester */
im = comp.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
kStrokes = im.allKeys();
if (kStrokes != null)
{
System.out.println("-------------------------");
System.out.println("InputMap for Component When Ancestor - " + comp.toString());
for (int i = 0; i < kStrokes.length; i++)
{
System.out.println("- " + kStrokes[i].toString() + " - "
+ im.get(kStrokes[i]).toString());
}
}
System.out.println("-------------------------");
} // printActionInputMap
/**
* Is 8 Bit
* @param str string
* @return true if string contains chars > 255
*/
public static boolean is8Bit (String str)
{
if (str == null || str.length() == 0)
return true;
char[] cc = str.toCharArray();
for (int i = 0; i < cc.length; i++)
{
if (cc[i] > 255)
{
// System.out.println("Not 8 Bit - " + str);
return false;
}
}
return true;
} // is8Bit
/**
* Clean Ampersand (used to indicate shortcut)
* @param in input
* @return cleaned string
*/
public static String cleanAmp (String in)
{
if (in == null)
return in;
int pos = in.indexOf('&');
if (pos == -1)
return in;
//
if (pos+1 < in.length() && in.charAt(pos+1) != ' ')
in = in.substring(0, pos) + in.substring(pos+1);
return in;
} // cleanAmp
/**
* Trim to max character length
* @param str string
* @param length max (incl) character length
* @return string
*/
public static String trimLength (String str, int length)
{
if (str == null)
return str;
if (length <= 0)
throw new IllegalArgumentException("Trim length invalid: " + length);
if (str.length() > length)
return str.substring(0, length);
return str;
} // trimLength
/**
* Size of String in bytes
* @param str string
* @return size in bytes
*/
public static int size (String str)
{
if (str == null)
return 0;
int length = str.length();
int size = length;
try
{
size = str.getBytes("UTF-8").length;
}
catch (UnsupportedEncodingException e)
{
log.log(Level.SEVERE, str, e);
}
return size;
} // size
/**
* Trim to max byte size
* @param str string
* @param size max size in bytes
* @return string
*/
public static String trimSize (String str, int size)
{
if (str == null)
return str;
if (size <= 0)
throw new IllegalArgumentException("Trim size invalid: " + size);
// Assume two byte code
int length = str.length();
if (length < size/2)
return str;
try
{
byte[] bytes = str.getBytes("UTF-8");
if (bytes.length <= size)
return str;
// create new - may cut last character in half
byte[] result = new byte[size];
System.arraycopy(bytes, 0, result, 0, size);
return new String(result, "UTF-8");
}
catch (UnsupportedEncodingException e)
{
log.log(Level.SEVERE, str, e);
}
return str;
} // trimSize
/**************************************************************************
* Test
* @param args args
*/
public static void main (String[] args)
{
String str = "a纀腸?d?e?f?g?";
System.out.println(str + " = " + str.length() + " - " + size(str));
String str1 = trimLength(str, 10);
System.out.println(str1 + " = " + str1.length() + " - " + size(str1));
String str2 = trimSize(str, 10);
System.out.println(str2 + " = " + str2.length() + " - " + size(str2));
//
AttributedString aString = new AttributedString ("test test");
aString.addAttribute(TextAttribute.FOREGROUND, Color.blue);
aString.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 2, 4);
getIterator (aString, new AttributedCharacterIterator.Attribute[] {TextAttribute.UNDERLINE});
} // main
} // Util
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -