Avatar billede deepcore Nybegynder
16. november 2005 - 12:56 Der er 2 kommentarer og
1 løsning

Hvorfor vises denne frame ikke med de korrekte mål

jeg har et problem med at få en normal controllerklasse til at starte en gui op. controllerklassen extender en guimaker klasse der skulle have de nødvendige metoder. et andet sted i programmet har jeg extended den samme klasse og ikke haft problemer.

GUI controller:

public class LMKController extends GUIMaker
{
  MainGUI mainGUI = new MainGUI();
 
  public LMKController()
  {
    setGUIproperties(mainGUI);
    setFrameVisible(mainGUI);
  }
}



GUI makeren som controlleren extender:

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;

public class GUIMaker
{
  public GUIMaker()
  {
  }
 
  public void setGUIproperties(Frame frame)
  {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    System.out.println(frameSize.width+" "+frameSize.height);
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
  }
 
 
  public void setFrameVisible(Frame frame)
  {
    frame.setVisible(true);
  }
}

Selve GUI'en
import java.util.ArrayList;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import java.awt.SystemColor;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

public class LoginGUI extends JFrame
{
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JLabel jLabel3 = new JLabel();
  private JTextField serverJtextField = new JTextField();
  private JTextField userNameJtextField = new JTextField();
  private JPasswordField passwordJpasswordField = new JPasswordField();
  private JButton loginButton = new JButton();
  private JComboBox typeJComboBox = new JComboBox();
  private JLabel jLabel4 = new JLabel();
  private JTextField portJTextField = new JTextField();
  private JLabel jLabel5 = new JLabel();
  private JTextField baseJTextField = new JTextField();
  private JLabel messageLabel = new JLabel();
  private DatabaseConnector dbConnector;
  private String dataBaseType="";
 
  public LoginGUI(DatabaseConnector dbConnector)
  {
    this.dbConnector=dbConnector;
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(281, 230));
    this.setTitle("Indtast adgangsoplysninger");
    jLabel1.setText("Username:");
    jLabel1.setBounds(new Rectangle(5, 70, 60, 25));
    jLabel2.setText("Server:");
    jLabel2.setBounds(new Rectangle(5, 10, 40, 25));
    jLabel3.setText("Password:");
    jLabel3.setBounds(new Rectangle(5, 95, 60, 25));
    serverJtextField.setBounds(new Rectangle(75, 10, 195, 20));
    serverJtextField.setBackground(SystemColor.activeCaptionText);
    serverJtextField.setText("stadsora.admnet.dfh.dk");
    typeJComboBox.addItem("Lægemiddelkandidat bevis");
    typeJComboBox.addItem("Bachelorbevis");
    userNameJtextField.setBounds(new Rectangle(75, 70, 195, 20));
    passwordJpasswordField.setBounds(new Rectangle(75, 95, 195, 20));
    loginButton.setText("All your base are belong to us!");
    loginButton.setBounds(new Rectangle(5, 145, 265, 25));
    loginButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          loginButton_actionPerformed(e);
        }
      });
    typeJComboBox.setBounds(new Rectangle(75, 120, 195, 20));
    jLabel4.setText("DiplomType:");
    jLabel4.setBounds(new Rectangle(5, 125, 60, 15));
    portJTextField.setText("1522");
    portJTextField.setBounds(new Rectangle(75, 35, 65, 20));
    jLabel5.setText("Port + Base");
    jLabel5.setBounds(new Rectangle(5, 40, 60, 15));
    baseJTextField.setText("STAX");
    baseJTextField.setBounds(new Rectangle(145, 35, 125, 20));
    messageLabel.setText("Indtast connection oplysninger");
    messageLabel.setBounds(new Rectangle(5, 175, 265, 25));
    this.getContentPane().add(messageLabel, null);
    this.getContentPane().add(baseJTextField, null);
    this.getContentPane().add(jLabel5, null);
    this.getContentPane().add(portJTextField, null);
    this.getContentPane().add(jLabel4, null);
    this.getContentPane().add(typeJComboBox, null);
    this.getContentPane().add(loginButton, null);
    this.getContentPane().add(passwordJpasswordField, null);
    this.getContentPane().add(userNameJtextField, null);
    this.getContentPane().add(serverJtextField, null);
    this.getContentPane().add(jLabel3, null);
    this.getContentPane().add(jLabel2, null);
    this.getContentPane().add(jLabel1, null);
  }

  private void loginButton_actionPerformed(ActionEvent e)
  {
    dbConnector.setHostname(serverJtextField.getText());
    dbConnector.setDbName(baseJTextField.getText());
    dbConnector.setPort(portJTextField.getText());
    dbConnector.setUserName(userNameJtextField.getText());
    dbConnector.setPassword(passwordJpasswordField.getText());
    dataBaseType=(String)typeJComboBox.getSelectedItem();
    try
    {
      dbConnector.initialize();
      messageLabel.setText("Connected to database...");
    }
    catch (Exception ex)
    {
      messageLabel.setText(ex.toString());
      ex.printStackTrace();
    }
  }


  public String getDataBaseType()
  {
    return dataBaseType;
  }
}
Avatar billede _carsten Nybegynder
16. november 2005 - 18:33 #1
Som jeg lige læser det, burde nedenstående gøre underværker, selvom jeg ikke lige er helt med, m.h.t. den måde det er bygget op, der mangler selvfølgelig nogle klasser, -men alligevel

  public void setFrameVisible(Frame frame){
    frame.pack();
    frame.setVisible(true);
  }
Avatar billede deepcore Nybegynder
17. november 2005 - 09:35 #2
ok. jeg fand fejlen. den lå i at jeg bruger flowlayout til den anden gui. Når man bruger flowlayout bruges .pack() ikke.

.pack() bruges når man har sat størelsen med

xYLayout1.setWidth(467);
xYLayout1.setHeight(261);

hvis man har sat størelsen med "this.setSize(new Dimension(467, 261));"

er den ikke nødvendig.

- men du havde ret - og fik mig desuden på rette spor, så point til dig. svar venligst
Avatar billede _carsten Nybegynder
17. november 2005 - 10:40 #3
Svar.

Det var rent gæt - når det virkede i en dine frames, kunne det være du brugte et layout der var afhængig af pack()  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester