Skip to content

Commit 603f15b

Browse files
committed
test code when java window is frameless....
1 parent ad9dced commit 603f15b

2 files changed

Lines changed: 102 additions & 27 deletions

File tree

src/main/java/com/openfin/desktop/demo/LayoutFrame.java

Lines changed: 76 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import java.awt.*;
2121
import java.awt.event.ActionEvent;
2222
import java.awt.event.ActionListener;
23+
import java.awt.event.MouseAdapter;
24+
import java.awt.event.MouseEvent;
25+
import java.awt.event.MouseMotionListener;
2326
import java.awt.event.WindowAdapter;
2427
import java.awt.event.WindowEvent;
2528
import java.lang.System;
@@ -31,19 +34,64 @@ public class LayoutFrame extends JFrame {
3134
private String windowName;
3235
private ChannelClient channelClient;
3336
private String appUuid;
37+
private boolean frameless;
3438

3539
public LayoutFrame(DesktopConnection desktopConnection, String appUuid, String windowName) throws DesktopException {
40+
this(desktopConnection, appUuid, windowName, false);
41+
}
42+
43+
public LayoutFrame(DesktopConnection desktopConnection, String appUuid, String windowName, boolean frameless) throws DesktopException {
3644
super();
3745
System.out.println(windowName + " being created ");
3846
this.appUuid = appUuid;
3947
this.windowName = windowName;
48+
this.frameless = frameless;
4049
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
4150
this.setPreferredSize(new Dimension(640, 480));
4251
JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
4352
this.btnUndock = new JButton("undock");
4453
this.btnUndock.setEnabled(false);
4554
pnl.add(btnUndock);
4655
this.getContentPane().add(pnl);
56+
57+
if (frameless) {
58+
this.setUndecorated(true);
59+
JPanel titleBar = new JPanel(new BorderLayout());
60+
titleBar.setBackground(Color.DARK_GRAY);
61+
MouseAdapter myListener = new MouseAdapter() {
62+
int pressedAtX, pressedAtY;
63+
@Override
64+
public void mousePressed(MouseEvent e) {
65+
pressedAtX = e.getX();
66+
pressedAtY = e.getY();
67+
System.out.println("mouse pressed at x=" + pressedAtX + ", y=" + pressedAtY);
68+
}
69+
70+
@Override
71+
public void mouseDragged(MouseEvent e) {
72+
int distanceX = e.getX() - pressedAtX;
73+
int distanceY = e.getY() - pressedAtY;
74+
System.out.println("dragged x=" + distanceX + ", y=" + distanceY);
75+
Point frameLocation = LayoutFrame.this.getLocation();
76+
LayoutFrame.this.setLocation(frameLocation.x + distanceX, frameLocation.y + distanceY);
77+
}
78+
};
79+
titleBar.addMouseListener(myListener);
80+
titleBar.addMouseMotionListener(myListener);
81+
82+
JButton btnClose = new JButton("X");
83+
btnClose.addActionListener(new ActionListener() {
84+
85+
@Override
86+
public void actionPerformed(ActionEvent e) {
87+
LayoutFrame.this.dispose();
88+
}});
89+
titleBar.add(btnClose, BorderLayout.EAST);
90+
91+
this.getContentPane().add(titleBar, BorderLayout.NORTH);
92+
93+
}
94+
4795
this.pack();
4896
this.setLocationRelativeTo(null);
4997
this.setVisible(true);
@@ -152,33 +200,35 @@ public void onError(Ack ack) {
152200
}
153201

154202
private void setHasFrame(JFrame frame, boolean hasFrame) {
155-
SwingUtilities.invokeLater(new Runnable() {
156-
@Override
157-
public void run() {
158-
System.out.println(windowName + " hasFrame=" + hasFrame);
159-
160-
Dimension size = frame.getSize();
161-
WinDef.HWND hWnd = new WinDef.HWND();
162-
hWnd.setPointer(Native.getComponentPointer(frame));
163-
164-
int style = User32.INSTANCE.GetWindowLong(hWnd, User32.GWL_STYLE);
165-
166-
if (hasFrame) {
167-
frame.setResizable(true);
168-
// style = style & ~User32.WS_CHILD;
169-
style = style | User32.WS_CAPTION | User32.WS_BORDER | User32.WS_THICKFRAME;
170-
} else {
171-
frame.setResizable(false);
172-
style = style &~ User32.WS_CAPTION &~ User32.WS_BORDER &~ User32.WS_THICKFRAME;
173-
// style = style | User32.WS_CHILD;
203+
if (!this.frameless) {
204+
SwingUtilities.invokeLater(new Runnable() {
205+
@Override
206+
public void run() {
207+
System.out.println(windowName + " hasFrame=" + hasFrame);
208+
209+
Dimension size = frame.getSize();
210+
WinDef.HWND hWnd = new WinDef.HWND();
211+
hWnd.setPointer(Native.getComponentPointer(frame));
212+
213+
int style = User32.INSTANCE.GetWindowLong(hWnd, User32.GWL_STYLE);
214+
215+
if (hasFrame) {
216+
frame.setResizable(true);
217+
// style = style & ~User32.WS_CHILD;
218+
style = style | User32.WS_CAPTION | User32.WS_BORDER | User32.WS_THICKFRAME;
219+
} else {
220+
frame.setResizable(false);
221+
style = style &~ User32.WS_CAPTION &~ User32.WS_BORDER &~ User32.WS_THICKFRAME;
222+
// style = style | User32.WS_CHILD;
223+
}
224+
User32.INSTANCE.SetWindowLong(hWnd, User32.GWL_STYLE, style);
225+
User32.INSTANCE.RedrawWindow(hWnd, null, null, new WinDef.DWORD((User32.RDW_FRAME | User32.RDW_INVALIDATE)));
226+
frame.setSize(size.width, size.height + 1);
227+
frame.invalidate();
228+
frame.repaint();
174229
}
175-
User32.INSTANCE.SetWindowLong(hWnd, User32.GWL_STYLE, style);
176-
User32.INSTANCE.RedrawWindow(hWnd, null, null, new WinDef.DWORD((User32.RDW_FRAME | User32.RDW_INVALIDATE)));
177-
frame.setSize(size.width, size.height + 1);
178-
frame.invalidate();
179-
frame.repaint();
180-
}
181-
});
230+
});
231+
}
182232
}
183233

184234
public String getWindowName() {

src/main/java/com/openfin/desktop/demo/LayoutServiceDemo.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class LayoutServiceDemo implements DesktopStateListener {
4141
private JSONArray serviceConfig = new JSONArray();
4242
private Map<String, LayoutFrame> childFrames = new HashMap();
4343
private WindowAdapter childFrameCleanListener;
44+
private JButton btnCreateFramelessJavaWindow;
4445

4546
LayoutServiceDemo() {
4647
try {
@@ -104,13 +105,29 @@ public void actionPerformed(ActionEvent e) {
104105
}
105106
}
106107
});
108+
this.btnCreateFramelessJavaWindow = new JButton("Create Frameless Java Window");
109+
this.btnCreateFramelessJavaWindow.addActionListener(new ActionListener() {
110+
@Override
111+
public void actionPerformed(ActionEvent e) {
112+
try {
113+
createFramelessJavaWindow();
114+
}
115+
catch (DesktopException e1) {
116+
e1.printStackTrace();
117+
}
118+
}
119+
});
120+
121+
107122
this.btnCreateOpenfinWindow.setEnabled(false);
108123
this.btnCreateJavaWindow.setEnabled(false);
124+
this.btnCreateFramelessJavaWindow.setEnabled(false);
109125
JPanel contentPnl = new JPanel(new BorderLayout(10, 10));
110126
contentPnl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
111127
JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
112128
pnl.add(btnCreateOpenfinWindow);
113129
pnl.add(btnCreateJavaWindow);
130+
pnl.add(btnCreateFramelessJavaWindow);
114131

115132
contentPnl.add(new JLabel("Undock Openfin windows with global hotkey (CTRL+SHIFT+U or CMD+SHIFT+U)"),
116133
BorderLayout.NORTH);
@@ -172,6 +189,7 @@ public void onSuccess(Ack ack) {
172189
public void run() {
173190
btnCreateOpenfinWindow.setEnabled(true);
174191
btnCreateJavaWindow.setEnabled(true);
192+
btnCreateFramelessJavaWindow.setEnabled(true);
175193
}
176194
});
177195
}
@@ -188,6 +206,13 @@ void createJavaWindow() throws DesktopException {
188206
this.childFrames.put(windowName, frame);
189207
frame.addWindowListener(this.childFrameCleanListener);
190208
}
209+
210+
void createFramelessJavaWindow() throws DesktopException {
211+
String windowName = "Java-" + UUID.randomUUID().toString();
212+
LayoutFrame frame = new LayoutFrame(this.desktopConnection, appUuid, windowName, true);
213+
this.childFrames.put(windowName, frame);
214+
frame.addWindowListener(this.childFrameCleanListener);
215+
}
191216

192217
void createOpenfinWindow() {
193218
try {
@@ -218,10 +243,10 @@ public void onError(Ack ack) {
218243

219244
@Override
220245
public void onReady() {
221-
222246
this.application = Application.wrap(appUuid, this.desktopConnection);
223247
btnCreateOpenfinWindow.setEnabled(true);
224248
btnCreateJavaWindow.setEnabled(true);
249+
btnCreateFramelessJavaWindow.setEnabled(true);
225250
}
226251

227252
@Override

0 commit comments

Comments
 (0)