Strona 1 z 1
JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 00:06
przez pineaaple
witam,
Jaka jest różnica miedzy zapisem:
1. JButton btn1 = toolBar.add(actionNew);
a tym:
2. JButton btn1 = new JButton(actionNew);
toolBar.add(btn1);
???
przed wystepuje ta czesc kodu:
ImageIcon iconNew = new ImageIcon("file_new.png");
Action actionNew = new AbstractAction("New", iconNew) {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("new action");
}
};
jak napisane jest sposobem 1 to button jest w postaci ikonki ale nazwy juz nie ma
jak napisane jest sposobem 2 to buton jest w postaci ikonki ale obok jest napisane New

Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 09:24
przez pineaaple
generalnie chodzi mi o to aby przyciski w MenuBar np. New , Save i przyciski w ToolBar'ze miały te same cechy czyli ikone, skrót, tooltiptext, action ale zeby przyciski w ToolBarze nie miały nazwy no bo wiadomo ze zawsze są ikonki same

i najlepiej w jednej klasie wszystko:)
Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 10:06
przez Morfidon
podaj jakiego typu jest zmienna toolBar
Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 10:13
przez pineaaple
może tak:
tutaj jest link do java2s.com (nie wiem czy mozna wklejać;p )
http://www.java2s.com/Code/Java/Swing-J ... enubar.htm
i jest ten programik
i zastanawia mnie dlaczego buttony 'nie przejmują' nazwy hehe:)
i jeszcze jedno:
zapis
JMenuItem item = mFile.add(actionNew);
mFile.add(item); //bez tej linijki działa identycznie
jest równoznaczy z:
JMenuItem item = new JMenuItem(actionNew);
mFile(item);
???
Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 10:18
przez Morfidon
W pierwszym wypadku
http://download.oracle.com/javase/7/doc ... ng.Action)
W drugim wypadku
http://download.oracle.com/javase/7/doc ... ng.Action)
W drugim pisze Ci, że przejmuje properties (cechy) czyli nazwy, a w pierwszym o tym nie wspominają.
Podejrzewam, że fix do pierwszego wypadku:
http://download.oracle.com/javase/7/doc ... ng.Action)
Sytuacja z mFile jest chyba analogiczna... chyba bo...
Ponawiam:
PISZ ZAWSZE JAKIEGO TYPU SĄ ZMIENNE LUB POKAZUJ JAK JE STWORZYŁEŚ.
Można wklejać co chcesz póki nie jest to reklama.
Pozdrawiam

Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 10:24
przez pineaaple
ok chyba rozumiem

jak napisze to wrzuce tutaj , prosiłbym o sprawdzenie
Pozdrawiam

Re: JButton, AbstratAction
Napisane: czwartek, 1 września 2011, 13:15
przez pineaaple
więc tak, wymyśliłem coś takiego, kompiluje się, ale jak dorobic akcje buutona w tej samej metodzie akcji co i menuitem (jak już to pewnie w w if'ie)
Czy w ogole jest sens tak robic, czy pod względem merytorycznym to jest dobrze? czy raczej kierować się tym co jest w linku w pierwszym poście:)
Code: Zaznacz cały
package window;
import java.awt.*;
import javax.swing.*;
public class Window extends JFrame {
public Window() {
super("Przykład");
setDefaultCloseOperation(3);
setBounds(300, 300, 300, 300);
setVisible(true);
createMenuAndToolBar();
}
public void createMenuAndToolBar() {
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
final Action actionNew = new ActionWindow("Nowy", "Nowy plik", "ctrl N", new ImageIcon("new.gif"));
final Action actionOpen = new ActionWindow("Otwórz", "Otwórz plik", "ctrl O", new ImageIcon("open.gif"));
final Action actionSave = new ActionWindow("Zapisz", "Zapisuje na dysku", "ctrl S", new ImageIcon("save.gif"));
JMenu menuFile = new JMenu("File");
menuBar.add(menuFile);
JMenuItem newFile = new JMenuItem(actionNew);
menuFile.add(newFile);
JMenuItem openFile = new JMenuItem(actionOpen);
menuFile.add(openFile);
JMenuItem saveFile = new JMenuItem(actionSave);
menuFile.add(saveFile);
JToolBar toolBar = new JToolBar("Narzędzia");
JButton btn1 = toolBar.add(actionNew);
JButton btn2 = toolBar.add(actionOpen);
JButton btn3 = toolBar.add(actionSave);
getContentPane().add(toolBar, BorderLayout.NORTH);
}
public static void main(String[] args) {
new Window();
}
}
i klasa odpowiedzialna za akcje:
package window;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class ActionWindow extends AbstractAction{
public ActionWindow(String nazwa, String podpowiedz, String klawiaturySkrot, Icon ikona)
{
this.putValue(Action.NAME, nazwa);
this.putValue(Action.SHORT_DESCRIPTION, podpowiedz);
this.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(klawiaturySkrot));
this.putValue(Action.SMALL_ICON, ikona);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Nowy"))
{
System.out.println("Nowy plik");
}
if(e.getActionCommand().equals("Otwórz"))
{
System.out.println("Otwieram");
}
if(e.getActionCommand().equals("Zapisz"))
{
System.out.println("Zapisuje na dyski");
}
}
}
prosze o wyrozumiałość i dobrą poradę !
