Java Swing vs C++ Qt

0

Hi, mam do napisania projekt z graficznym interfejsem użytkownika do wyboru mam Java Swing lub C++ Qt.
Nie ukrywam, że czas mnie nagli dlatego też proszę Was o opinię w której technologii pisze się szybciej i w której łatwiej się nauczyć - oczywiście obydwie odpowiedzi nie mogą być w pełni obiektywne jednakże chętnie zapoznam się z Waszymi opiniami.

Pozdrawiam!

0

A w czym więcej programowałeś?

0

Mi się wydaje, że lepsze będzie Qt. Łatwo jest zrozumieć działanie slotów i sygnałów, jest piękna dokumnetacja w Internecie i mnóstwo przykładów. JA bym polecał Qt :)

0

Co do Qt:

  • łatwe Layouty do obsługiwania z poziomu kodu
  • klasa QWidget
  • mechanizm slotów i sygnałów
  • przenośne systemowo
  • dokumentacja i przykłady
  • wymagana kompilacja na wszystkich platformach na których ma działać
  • rysowanie (przynajmniej ja nigdy nie lubiłem)
  • ciężkie biblioteki

Swing i Java:

  • generator w NetBeansie
  • Graphics2D
  • ActionListener i operowanie na Stringach i ActionCommand
  • Wątki mogą stanowić problem (długo nie wiedziałem czemu mi się okienka nie rysują po wykonaniu repaint() spod ActionListenera:D)
  • Przenośne
  • może działać jako aplet
  • brak "menedżera sceny"

Qt znam z wersji 4.4, 4.5 i nieco 4.6. W 4.7 wprowadzono nowe ("dodatkowe", kompatybilne ze starym) API, którego za bardzo nie znam, być może też jest coś w stylu ActionListenerów

Ew. QtJambi: łaczy ze sobą wady Qt i Javy :) Nie używałem go zbyt dużo: JavaBlocka pisałem z początku w Qt Jambi (wcześniej w samym Qt, ale zachciało mi się Javy). Zrezygnowałem po kilku godzinach - Java i QGraphicsScene po prostu nie współgrają (program stał się miotaczem wyjątków przy dynamicznym zarządzaniu obiektami xD). Może po prostu nie umiem się posługiwać tym wynalazkiem.

0

Hi, zabrałem się za Swinga - wydał mi się prostszy. Mam tylko jeden problem - po uruchomieniu programu nie widać textFieldów. Dopiero po kliknięciu w miejsce gdzie się powinny znajdować pojawiają się.

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JComboBox;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import java.math.BigDecimal;

class ButtonPanel extends JFrame
{
    public ButtonPanel()
    {
       setSize(300, 300);
       setTitle("Kalkulator");
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setLayout(null);
       setVisible(true);

       button1 = new JButton("Wykonaj");
       button1.setLocation(105, 240);
       button1.setSize(90, 20);
       button1.setVisible(true);
       add(button1);

       textField1 = new JTextField("Operand", 5);
       textField1.setLocation(40, 30);
       textField1.setSize(90, 20);
       textField1.setVisible(true);
       add(textField1);

       textField2 = new JTextField("Operand", 5);
       textField2.setLocation(145, 30);
       textField2.setSize(90, 20);
       textField2.setVisible(true);
       add(textField2);

       comboBox1 = new JComboBox();
       comboBox1.setEditable(false);
       comboBox1.addItem("+");
       comboBox1.addItem("-");
       comboBox1.addItem("*");
       comboBox1.addItem("/");
       comboBox1.setLocation(40, 75);
       comboBox1.setSize(60, 20);
       comboBox1.setVisible(true);
       add(comboBox1);

       label1 = new JLabel("Wynik");
       label1.setLocation(145, 75);
       label1.setSize(80, 20);
       label1.setVisible(true);
       add(label1);

       button1.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent e)
           {
               
                if(comboBox1.getSelectedIndex() == 0)
                    label1.setText("" +
                            (Float.parseFloat(textField1.getText( )) + Float.parseFloat(textField2.getText()))
                            );
                 if(comboBox1.getSelectedIndex() == 1)
                    label1.setText("" +
                            (Float.parseFloat(textField1.getText( )) - Float.parseFloat(textField2.getText()))
                            );
                if(comboBox1.getSelectedIndex() == 2)
                    label1.setText("" +
                       (Float.parseFloat(textField1.getText( )) * Float.parseFloat(textField2.getText()))
                            );
                 if(comboBox1.getSelectedIndex() == 3)
                    label1.setText("" +
                            (Float.parseFloat(textField1.getText( )) / Float.parseFloat(textField2.getText()))
                            );
            }
        });
    }

    private JButton button1;
    private JTextField textField1;
    private JTextField textField2;
    private JComboBox comboBox1;
    private JLabel label1;
}
public class Kalk
{
    public static void main(String[] args)
    {
     ButtonPanel app =  new ButtonPanel();
     app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     app.setVisible(true);
    }

}
0

Do konstruktora na koniec wrzuć: revalidate(); repaint().
A do main():

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                 ButtonPanel app =  new ButtonPanel();
                 app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                 app.setVisible(true);
            }
        });
0

Hi, dziękuję bardzo.
Zapomniałem o inicjalizacji w EventQuere.

Pozdrawiam!

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