Czy istnieją jakieś programy do rozkładu graficznego elementów w Swingu?

0

Chodzi mi o to, żebym nie bawił się w rozkłady, tylko po prostu graficznie poustawiał sobie elementy i je później jedynie okodował.

1

Istnieją: link

0

Polecam Netbeans.

0

A mam pytanie przy okazji. Czy w praktyce na co dzień większość programistów używa tych programów typu NetBeans, czy raczej kodują rozmieszczenie komponentów itd ręcznie ?

0

Ech jak już robisz GUI w Javie to czemu jakieś średniowieczne technologie stosujesz zamiast JavaFX?

0
slayer9 napisał(a):

A mam pytanie przy okazji. Czy w praktyce na co dzień większość programistów używa tych programów typu NetBeans, czy raczej kodują rozmieszczenie komponentów itd ręcznie ?

Kiedyś pracowałem w korpo w projekcie w którym były własne abstrakcje na Swinga i w nich się tworzyło interfejs. Nie było graficznych programów do rozmieszczania komponentów. Ale to tylko jeden przypadek. Ogólny trend i tak jest taki, by pisać aplikacje webowe.

0

Pracowałem dawno temu w sporym projekcie ze Swingiem i był używany NetBeans, zresztą prawie wyłącznie do formatek, no chyba że jakieś pojedyncze osoby były jego fanami. :)

0

Czyli ręcznie tego nikt nie koduje ?

0

Ja koduję ręcznie. GUI Designera z NetBeans nie użyłbym nawet pod groźbą wyrywania zęba bez znieczulenia.
@Shalom i @Black007 też chyba są zwolennikami kodowania ręcznego (http://4programmers.net/Forum/Java/275924-swing_jtabbedpane_-_paskudny_wyglad_rozmieszczanie_komponentow).

0
bogdans napisał(a):

Ja koduję ręcznie.

a możesz powiedzieć jak wygląda u Ciebie np. metoda tworząca GUI? czy to cała klasa oddzielna?

ja np. Tworzę metodę initGUI w głównej klasie, są inne elegantsze sposoby?

0

Zazwyczaj tak:

    public static void main(String[] args)
    {
        try
        {
            UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
            for(int i=0;i<info.length;i++)
            {
                if(info[i].getName().equals("Nimbus"))
                {
                    UIManager.setLookAndFeel(info[i].getClassName());
                }
            }
        }
        catch(Exception e)
        {}
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run() 
            {
            	new NazwaKlasy();
            }
        });
...
    public NazwaKlasy()
    {
        setTitle(...);
        setLayout(new BorderLayout(2,2));
        add(createToolBar(),BorderLayout.NORTH);

        JScrollPane sp = new JScrollPane(info);
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        add(sp,BorderLayout.CENTER);

        add(createBottomPanel(),BorderLayout.SOUTH);

        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //a jeśli trzeba posprzątać, to
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setVisible(true);
    }

Jeśli kod opisujący jakiś fragment okna jest długi, to go przenoszę do metody, jeśli jest krótki (sp w powyższym przykładzie), to zostawiam w konstruktorze.

0

czyli GUI opakowujesz w oddzielnej klasie:)

1

Nie zawsze, często stosuje takie coś:

        JButton download = new JButton(...);
        download.setToolTipText("Pobranie katalogu (pliku)");
        download.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                download();
            }
        });

Metoda download() jest metodą klasy tworzącej GUI.

0

od wielkości GUI uzależniasz to jak je tworzysz czy od czego?

Aktualnie piszę większą aplikację która ma lekko rozbudowane GUI i metody tworzące GUI są "duże" i nie wiem czy tak to się robi czy robię to źle...

private void initGUI() {
        Label labelVillageAttacked = new Label("Lista wiosek atakowanych");
        labelVillageAttacked.setMinWidth(250);
        Label labelVillageMe = new Label("Lista wiosek Off");
        labelVillageMe.setMinWidth(250);
        Label labelList = new Label("Lista rozkazów");
        labelList.setMinWidth(250);

        //Create layout and Add a labels to layout.
        HBox layoutLabel = new HBox();
        layoutLabel.getChildren().addAll(labelVillageMe, labelVillageAttacked, labelList);

        //Konstruktor text boxes and MIN width and height.
        areaVillageAttacked = new TextArea();
        areaVillageAttacked.setMinWidth(250);
        areaVillageAttacked.setMinHeight(400);
        areaVillageMe = new TextArea();
        areaVillageMe.setMinWidth(250);
        areaVillageMe.setMinHeight(400);
        areaList = new TextArea();
        areaList.setMinWidth(250);
        areaList.setMinHeight(400);
        areaList.setEditable(false);

        //Create layout and add a text boxes
        HBox layoutTextArea = new HBox();
        layoutTextArea.getChildren().addAll(areaVillageMe, areaVillageAttacked, areaList);

        Label labelUserName = new Label("Nazwa gracza");
        labelUserName.setMinWidth(80);
        textUserName = new TextField();

        HBox layoutUserName = new HBox(20);
        layoutUserName.getChildren().addAll(labelUserName, textUserName);

        HBox layoutDate = new HBox(20);
        labelDate.setMinWidth(80);
        Tooltip toolTipTextDate = new Tooltip("Wybierz date z kalendarza lub podaj ręcznie w formacie 'dd.mm.rrrr'");
        date.setTooltip(toolTipTextDate);
        layoutDate.getChildren().addAll(labelDate, date);

        HBox layoutTime = new HBox(20);
        labelTime.setMinWidth(80);

        Tooltip toolTipTextTime = new Tooltip("Podaj czas w formacie 'hh:mm:ss'");
        textTime.setTooltip(toolTipTextTime);

        textTime.setText((timeSetting.get(GregorianCalendar.HOUR_OF_DAY) < 10 ? "0" + timeSetting.get(GregorianCalendar.HOUR_OF_DAY) : timeSetting.get(GregorianCalendar.HOUR_OF_DAY)) +
                ":" + (timeSetting.get(GregorianCalendar.MINUTE) < 10 ? "0" + timeSetting.get(GregorianCalendar.MINUTE) : timeSetting.get(GregorianCalendar.MINUTE)) +
                ":" + (timeSetting.get(GregorianCalendar.SECOND) < 10 ? "0" + timeSetting.get(GregorianCalendar.SECOND) : timeSetting.get(GregorianCalendar.SECOND)));
        layoutTime.getChildren().addAll(labelTime, textTime);

        buttonCalculate = new Button("Oblicz");
        buttonAttacks = new Button("Ilość Ataków");

        HBox layoutButton = new HBox(10);
        layoutButton.setAlignment(Pos.CENTER);
        layoutButton.getChildren().addAll(buttonAttacks, buttonCalculate);

        //add layout text boxes, layout labels, date
        VBox layoutV = new VBox();
        layoutV.getChildren().addAll(layoutLabel, layoutTextArea);
        layout.getChildren().addAll(layoutV, layoutUserName, layoutDate, layoutTime, layoutButton);
        root.getChildren().addAll(layout);
    }

w innej metodzie tworzę cały pasek menuBar np.

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