JTabbedPane nie dziala z MenuBar?

Odpowiedz Nowy wątek
2011-03-16 09:53

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

0

hej,
mam do Was 2 pytania - jedno teoretyczne, drugie praktyczne.

  1. Netbeans ma bardzo ulatwione "robienie w swingu". Wystarczy przeciagac kontrolki, pozycjonowac sobie - to bardzo ulatwia. Ale zastanawiam sie czy jest jakies ale. Jak Wy piszecie? Uzywacie netbeansowej palety i na tej podstawie tworzycie GUI, a potem dolaczacie logike aplikacje? czy jednak powinno sie pisac recznie? Czy do eclipse jest jakas podobna wtyczka? czy taki projekt (czyli netbeansowy Java Desktop Application) pod eclipse sie rozjedzie?

  2. Pytanie numer dwa tyczy sie JTabbedPane i MenuBar. No wiec w jednej z zakladek chce dodac MenuBar, ale po prostu sie nie dodaje, nie widac tego! czy ktos z Was wie moze czym to jest spowodowane? a moze nie moge dodac MenuBar do JTabbedPane? Jesli tak-czym moglabym to zastapic?

       pzdr,
    misty

@2 jak recznie napisalam sobie kod to sie dodaje i jest ok. ale jak korzystam z tej palety netbeansa to jest problem. dodaje element, ale jak podejrze kod to widze ze nie wygenerowalo sie tam nigdzie setMenuBar(menu); Czy ktos z Was wie jak moge to dodac? mam juz cale gui wyklikane za pomoca tej palety i jeszcze tylko to cholerne menu..

Pozostało 580 znaków

2011-03-17 21:04

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

1

odp na pytanie 1:

dodaje się przyciski, a następnie implementuję ich obsługę. Mam nadzieje, że zdjęcie Ci pomoże zobrazowaniem tego jak powstaje kod :) Po wybraniu np : ActionPerformed utworzy się automatycznie taki kod:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        /*
         implementacja obsługi utworzonego przycisku 
         */

    }

odp na pytanie 2:
mam nadzieje , że dobrze zrozumiałam. Chcesz zrobić zakładki, a w nich menu..?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tabbedpane_menu;

/**
 *
 * @author kasiaKasia
 */
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

public class TabbedPaneDemo extends JPanel {

    public TabbedPaneDemo() {
        super(new GridLayout(2, 1));

        JTabbedPane tabbedPane = new JTabbedPane();
        ImageIcon ikona = createImageIcon("images/middle.gif");
        JMenuBar menuBar;
        JMenu menu;
        JMenuItem menuItem;

        //Tworzenie paska menu
        menuBar = new JMenuBar();

        //Utworzenie 1 menu
        menu = new JMenu("Menu");
        menu.setMnemonic(KeyEvent.VK_A);
        menuBar.add(menu);

        menuItem = new JMenuItem(">> 1", KeyEvent.VK_T);

        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menu.add(menuItem);

        menuItem = new JMenuItem(">> 2", ikona);
        menuItem.setMnemonic(KeyEvent.VK_B);
        menu.add(menuItem);

        menuItem = new JMenuItem(ikona);
        menuItem.setMnemonic(KeyEvent.VK_D);
        menu.add(menuItem);

        JComponent panel1 = menuBar;

        tabbedPane.addTab("Zakładka 1", ikona, panel1,
                "Chmurka 1");
        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

        JComponent panel2 = makeTextPanel("Opis zakładki nr 2");
        tabbedPane.addTab("Zakładka 2", ikona, panel2, "Chmurka 2");
        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

        //Dodanie zadładek do panelu
        add(tabbedPane);

        //Następująca linia umożliwia korzystanie z kart przewijania.

        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    }
    /*
     * metoda która zwraca panel w zakładce
     */

    protected JComponent makeTextPanel(String text) {
        JPanel panel = new JPanel(false);
        JLabel filler = new JLabel(text);
        filler.setHorizontalAlignment(JLabel.CENTER);
        panel.setLayout(new GridLayout(1, 2));
        panel.add(filler);
        return panel;
    }

    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    private static void createAndShowGUI() {
        //Tworzenie i konfiguracja okna.
        JFrame frame = new JFrame("Zakładki i menu ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Dodawanie zawartości do okna.
        frame.add(new TabbedPaneDemo(), BorderLayout.CENTER);

        //Wyświetlenie okna (ramki)
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                UIManager.put("swing.boldMetal", Boolean.FALSE);
                createAndShowGUI();
            }
        });
    }
}

aby ten przykład napisać korzystałam z tych stron internetowych:

http://download.oracle.com/ja[...]ng/components/tabbedpane.html

http://download.oracle.com/ja[...]g/components/menu.html#create


edytowany 2x, ostatnio: kasiaKasia, 2011-03-17 21:32
kod nie jest idealny, ale ja też się uczę :) - kasiaKasia 2011-03-17 21:18

Pozostało 580 znaków

2011-03-17 22:48

Rejestracja: 9 lat temu

Ostatnio: 5 lat temu

0

Wiem że to pewnie złe rozwiązanie, ale w moim programie w kilku oknach (w tym i w wersji apletowej) pasek menu potraktowałem jak zwykły komponent i ustawiłem go w Layoucie :D W każdym bądź razie działa.

Ile się da to to wyklikam. Resztę trzeba samemu napisać. Jak są jakieś zmienne fragmenty okna, to też je wyklikam, tylko tworzę JPanele do łatwiejszej obsługi i tylko podmieniam je w kodzie.

Pozostało 580 znaków

2011-03-17 23:11

Rejestracja: 9 lat temu

Ostatnio: 1 rok temu

0
Razi91 napisał(a)

Wiem że to pewnie złe rozwiązanie, ale w moim programie w kilku oknach (w tym i w wersji apletowej) pasek menu potraktowałem jak zwykły komponent i ustawiłem go w Layoucie :D W każdym bądź razie działa.

nie za bardzo rozumiem powyższe zdania..?
po klasie JComponent dziedziczą:
JPanel,
JScrollPane,
JButton,
JTable itp

Razi91 napisał(a)

Ile się da to to wyklikam. Resztę trzeba samemu napisać. Jak są jakieś zmienne fragmenty okna, to też je wyklikam, tylko tworzę JPanele do łatwiejszej obsługi i tylko podmieniam je w kodzie.

może tak: za pomocą jakiego komponentu chciałbyś wykonać jakie zdarzenie


edytowany 2x, ostatnio: kasiaKasia, 2011-03-17 23:17

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0