#java #swing #user-interface #package #jframe
#java #качать #пользовательский интерфейс #пакет #jframe
Вопрос:
Я пытаюсь запустить свои JFrames из папки пакета (которая работает и была настроена правильно). Проблема в том, что он компилируется и запускается, но я ничего не вижу, и я не знаю, что исправить, поскольку ошибок нет. Вероятно, я упускаю из виду что-то очень маленькое, но я просто не могу точно определить это. Этот код является моим основным классом и первым классом JFrame, который я буду использовать. Любые идеи о том, как наиболее эффективно реализовать JFrame из пакета, будут высоко оценены.
import GroupProject.GUI.Package.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class TestGuiApp1
{
public static void main(String[] Args)
{
// Gets screen dimensions to be used to center JFrame
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
//creates new Main Menu Frame from GUI packages
new MainMenuFrame();
//constraints and unlocking/locking features
//setLocation((d.width/2)-350, (d.height/2)-350);
//setResizable(false);
}
}
//Запуск класса JFrame из пакета
package GroupProject.GUI.Package;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.plaf.nimbus.*;
public class MainMenuFrame extends JFrame
{
private JButton guess_word,
guess_number,
player_stats;
private JLabel pic_label = new JLabel(new ImageIcon("Question-Mark-Man.jpg"));
public MainMenuFrame()
{
try {
UIManager.setLookAndFeel(new NimbusLookAndFeel()
{
public UIDefaults getDefaults()
{
UIDefaults ret = super.getDefaults();
ret.put("defaultFont",
new Font(Font.MONOSPACED, Font.BOLD, 16));
return ret;
}
});
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
ButtonListener listener = new ButtonListener();
// Panel Size
setPreferredSize(new Dimension(550, 300));
// Background Color
setBackground(new Color(127, 157, 217));
p1.setBackground(new Color(127, 157, 217));
// -------------------- Buttons -------------------
// Guess a word Button
guess_word = new JButton("Guess a word", new ImageIcon("word game.png"));
guess_word.setFont(new Font("ariel narrow",Font.BOLD,24));
guess_word.addActionListener(listener);
p1.add(guess_word);
// Guess a number Button
guess_number = new JButton("Guess a number", new ImageIcon("number game.png"));
guess_number.setFont(new Font("ariel narrow",Font.BOLD,24));
guess_number.addActionListener(listener);
p1.add(guess_number);
// View player stats button
player_stats = new JButton("Player Stats", new ImageIcon("stats2.png"));
player_stats.setFont(new Font("ariel narrow",Font.BOLD,24));
player_stats.addActionListener(listener);
p1.add(player_stats);
// ---------------------------------------------------
// ============ Layouts using group layout ============
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
.addComponent(guess_word, GroupLayout.PREFERRED_SIZE, 280,
GroupLayout.PREFERRED_SIZE)
.addComponent(guess_number, GroupLayout.PREFERRED_SIZE, 280,
GroupLayout.PREFERRED_SIZE)
.addComponent(player_stats, GroupLayout.PREFERRED_SIZE, 280,
GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(p2, GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap()));
layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
.addComponent(p2, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(guess_word, GroupLayout.PREFERRED_SIZE, 60,
GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(guess_number, GroupLayout.PREFERRED_SIZE, 60,
GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(player_stats, GroupLayout.PREFERRED_SIZE, 60,
GroupLayout.PREFERRED_SIZE)))
.addContainerGap(239, Short.MAX_VALUE)));
// ===================================================
p2.add(pic_label);
} catch (Exception ex)
{
throw new Error(ex);
}
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//need to set values to remember what game the user wants to play
// before it goes to the SelectPlayerTypeFrame
if (e.getSource() == guess_word)
;//new MainMenu();
if (e.getSource() == guess_number)
; // new MainMenu();
if (e.getSource() == player_stats)
;//new MainMenu();
}
}
}
Комментарии:
1. Ах, я понял, что groupplayout использовал ключевое слово this и вместо этого нуждался в getContentPane() .
Ответ №1:
Вы никогда не настраиваете свой фрейм так, чтобы он был видимым, и вы не вызываете pack()
его, чтобы указать ему размер его дочерних компонентов.
JFrame frame = new MainMenuFrame();
frame.pack();
frame.setVisible(true);
Комментарии:
1. Изначально я пробовал это, но получил ошибку во время выполнения… Groupplayout можно использовать только с одним контейнером одновременно
Ответ №2:
Где вы вызываете setVisible (true) в JFrame?
т.е.,
myFrame.setVisible(true);
или в вашем случае:
this.setVisible(true); // this is not necessary but here for clarity
Также обратите внимание, что это должно вызываться после добавления всех компонентов в графический интерфейс и после вызова pack
(как указано в другом ответе на этой странице).
Вам нужно будет ознакомиться с учебными пособиями по Java Swing, чтобы немного понять, как создавать Swing-программы, поскольку эти знания будут вам чрезвычайно полезны: Swing Tutorials
Кроме того, я настоятельно рекомендую вам не использовать NetBeans для генерации кода Swing для вас, по крайней мере, не на этом этапе игры, пока вы не разберетесь в Swing немного больше. Генератор кода отлично подходит для быстрого и грязного создания кода, но если вы не знаете азов и болтов Swing, вы часто можете застрять, если хотите создать что-то большее, чем самый простой графический интерфейс. Я знаю это по опыту.
Комментарии:
1. Изначально я пробовал это, но получил ошибку во время выполнения… Groupplayout можно использовать только с одним контейнером одновременно
2. Это означает, что вы неправильно используете groupplayout. Решение: не используйте сгенерированный NetBeans код. Вместо этого создайте свой собственный Swing-код, используя учебные пособия в качестве руководства. Это включает в себя использование более простых в использовании менеджеров компоновки, если это возможно.