All I want to do is load information I saved to a plain text file about the position of a JInternalFrame and set the frame to the state it was saved as. For some reason I'm unable to compare capture groups with strings; that is, matcher.group("state")
compared to the string it should be ("min"
, "max"
, or "normal"
) is not returning true, and the same goes with matcher.group("vis")
.
String fileArrayStr = "WINDOW_LAYOUT:0,0|779x768|max|show"
My code is:
byte[] fileArray = null;
String fileArrayStr = null;
try {
fileArray = Files.readAllBytes(PathToConfig);
} catch (IOException e) {
e.printStackTrace();
}
try {
fileArrayStr = new String(fileArray, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// checking the value of fileArrayStr here by outputting it
// confirms the data is read correctly from the file
pattern = Pattern.compile(
"WINDOW_LAYOUT:\\s*" +
"(?<x>[0-9\\-]+),(?<y>[0-9\\-]+)\\|" +
"(?<length>\\d+)x(?<height>\\d+)\\|" +
"(?<state>[minaxorl]+)\\|" +
"(?<vis>[showide]+)\\s*");
matcher = pattern.matcher(fileArrayStr);
if (matcher.find()) {
frame.setLocation(Integer.parseInt(matcher.group("x")),
Integer.parseInt(matcher.group("y")));
frame.setSize(Integer.parseInt(matcher.group("length")),
Integer.parseInt(matcher.group("height")));
DialogMsg("state: " + matcher.group("state") + "\n" + "vis: "
+ matcher.group("vis"));
// the above DialogMsg call (my own function to show a popup dialog)
// shows the
// data is being read correctly, as the values are "max" and "show"
// for state
// and vis, respectively. Same with the DialogMsg calls below.
if (matcher.group("state") == "min") {
try {
frame.setIcon(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} else if (matcher.group("state") == "max") {
try {
frame.setMaximum(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} else {
DialogMsg("matcher.group(\"state\") = \""
+ matcher.group("state") + "\"");
}
if (matcher.group("vis") == "show") {
frame.setVisible(true);
} else if (matcher.group("vis") == "hide") {
frame.setVisible(false);
} else {
DialogMsg("matcher.group(\"vis\") = \"" + matcher.group("vis")
+ "\"");
}
}
The code is always falling back to the else
statements. What am I doing wrong? matcher.group is supposed to return a string, is it not?