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ę ! :)