I am implementing a SWT Browser in my project to display HTML
Pages. When user right clicks on this browser it shows a popup menu with functionalities like "Print", "Print View". Can this be done with separate buttons, if I place them on a Toolbar?
Another functionality of the browser control is using "Ctrl+F", which bring a find dialogue. Can this dialogue be called using a button?
please help me?
You can achieve some of those goals by executing JavaScript when the Button is pressed.
Here is an example for the print dialog:
public static void main(String[] args)
{
Display display = Display.getDefault();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
final Browser browser = new Browser(shell, SWT.NONE);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Button button = new Button(shell, SWT.PUSH);
button.setText("Search");
button.addListener(SWT.Selection, new Listener()
{
#Override
public void handleEvent(Event arg0)
{
browser.execute("window.print()");
}
});
shell.pack();
shell.setSize(600, 400);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
Just search online how to achieve the other functionalities that you want to add by using javascript.
Related
I would like to create a dialog window that shows a user's profile (such as name, avatar, sex, etc.) in a visually pleasing way by using labels that contain the relevant information. At the same time, I would like to show an edit button that transforms the labels into textboxes or buttons allowing the name or avatar to be changed.
How can I realize this with SWT? What would be the best strategy to approach this?
You can use a Text and then set setEditable(boolean) to enable/disable editing of the text box from the SWT.Selection Listener of the Button:
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
// Create a read-only text field
final Text text = new Text(shell, SWT.BORDER);
text.setEditable(false);
text.setText("Some text here");
Button button = new Button(shell, SWT.PUSH);
button.setText("Change");
button.addListener(SWT.Selection, new Listener()
{
#Override
public void handleEvent(Event event)
{
text.setEditable(!text.getEditable());
}
});
shell.open();
shell.pack();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
Alternatively, you can use a StackLayout and have two versions of the same UI (or just parts of it) and switch between them when the button is pressed.
How do I right align the check box in my Java SWT application ? Here is my code snippet:
Button checkFullECR = new Button(scrolledForm.getBody(), SWT.CHECK);
checkFullECR.setAlignment(SWT.RIGHT);
checkFullECR.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
checkFullECR.setText("I need the complete ECR/ECN Process:");
It looks like the following:
[ ] I need the complete ECR/ECN Process:
I want it to look like:
I need the complete ECR/ECN Process: [ ]
You can't do this using just a Button control, you will need to use a Label for the text and a checkbox Button with no text arranged in two columns.
Something like:
Composite body = new Composite(parent, SWT.NONE);
body.setLayout(new GridLayout(2, false));
Label label = new Label(body, SWT.LEFT);
label.setText("I need the complete ECR/ECN Process:");
Button checkFullECR = new Button(body, SWT.CHECK);
... more label / button pairs ....
For once I kind of have to disagree with Greg.
You can use the setOrientation(int) method of the Button to force right-to-left layout:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
Button button = new Button(shell, SWT.CHECK);
button.setText("TEST");
button = new Button(shell, SWT.CHECK);
button.setOrientation(SWT.RIGHT_TO_LEFT);
button.setText("TEST");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
Looks like this:
(Tested on Linux Mint and Windows. Does not work on the Mac.)
My program opens a dialog (on a given shell):
new FileDialog(shell).open();
My Question is: How can I (in another part of my program) close all open dialogs of a given
shell?
private void closeDialogs(Shell shell) {
// how to close open dialogs?
}
Below is minimal test case, one button opens the dialogs. The other button should
close all open dialogs of the current shell.
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Testcase");
shell.setLayout(new FillLayout());
final Button button = new Button(shell, SWT.PUSH);
button.setText("Open Dialog");
button.addSelectionListener(new SelectionAdapter() {
#Override
public void widgetSelected(final SelectionEvent e) {
new NonModalDialog(shell).open();
}
});
Button button2 = new Button(shell, SWT.PUSH);
button2.setText("Close open dialogs");
button2.addSelectionListener(new SelectionAdapter() {
#Override
public void widgetSelected(SelectionEvent e) {
// How to close all open dialogs of the given shell?
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
You will have to collect the dialogs in a list as you open them.
When the "close" button is clicked, walk through the list and close the dialogs.
Note: This will not work when any of the dialogs are modal. A modal dialog will take over the event loop and ignore any events that aren't directed at itself, so clicking on the button will be impossible.
I have an issue about the tray items display in Gnome Shell.
The item icon appears in the lower bar, and I'm fine with that, and just like the other ones, when moving the mouse over the icon, a text is displayed.
My problem is that this text cannot be changed: setting a text with .setText does not work, neither the class support any event, but Selected and MenuDetect, which detect the left and right click, respectively.
Has anybody experienced the same problem?
Thanks a lot in advance for your answers,
Gianluca
Not quite sure what problem you are facing, but this works for me:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Tray tray = display.getSystemTray();
TrayItem item;
if (tray != null) {
item = new TrayItem(tray, SWT.NONE);
item.setToolTipText("A");
item.setImage(display.getSystemImage(SWT.ICON_ERROR));
}
Button button = new Button(shell, SWT.PUSH);
button.setText("Change tray text");
button.addListener(SWT.Selection, new Listener() {
#Override
public void handleEvent(Event arg0) {
if(tray != null)
{
TrayItem item = tray.getItem(0);
item.setToolTipText(item.getToolTipText() + "A");
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Note that I don't use setText(), but rather setToolTipText().
i am using eclipse rcp and swt for developing application.i have a list and i need to set its visibility false on a movement of title bar or when user click a titleBar. i am unable to find any event of titleBar. Is there any event of titleBar so that i can solve my problem? Or any thing that could probably solve my problem? i searched but could find for flex only as
function panelClick ( event:MouseEvent ) : void
{
trace( event.localX + '/' + event.localY );
}
is there same thing for swt using eclispe.
thanks in advance.
The following code will output "Move" and "Minimize" when the corresponding events happen:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Button dummy = new Button(shell, SWT.PUSH);
dummy.setText("Dummy");
shell.addListener(SWT.Move, new Listener() {
#Override
public void handleEvent(Event arg0) {
System.out.println("Move");
}
});
shell.addListener(SWT.Iconify, new Listener() {
#Override
public void handleEvent(Event arg0) {
System.out.println("Minimize");
}
});
shell.pack();
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
However, the SWT.MOVE event is only fired after the shell has been moved, i.e. when the "move" is over.