2013-11-20 3 views
-2

Вот кодJPanel не будет отображаться на JFrame

import Sprites.*; 

import javax.swing.*; 

import java.awt.*; 
public class Main { 
public int Health = 100; 
public int ArmourPt = 0; 
public int Gold = 250; 
public static JLabel Goldlbl = new JLabel("Gold:"); 
public static JLabel Healthlbl = new JLabel("Health:"); 
public static JLabel ArmourPtLbl = new JLabel("Armour Points"); 
public static JFrame MainWindow = new JFrame(); 
    public static int CalcDamage(int Damage, int Armour){ 
    int ReturnDamage = Damage - Armour + Damage/Damage + Armour/Damage * Damage -   Armour + Damage + 25 ; 
    if(ReturnDamage < 0){ 
     ReturnDamage = 0; 
    } 
    return ReturnDamage; 

} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    MainWindow.setSize(1500, 700); 
    MainWindow.setTitle("Ampventure");; 

    JPanel MPanel = (JPanel)MainWindow.getContentPane(); 
    MPanel.setLayout(null); 

    JPanel StatsPanel = new JPanel(); 
    StatsPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
    StatsPanel.setSize(350, 450); 
    StatsPanel.setLocation(0, 0); 
    StatsPanel.setMaximumSize(new Dimension (350, 450)); 
    MPanel.add(StatsPanel); 

    JPanel InvPanel = new JPanel(); 
    InvPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
    InvPanel.setSize(350, 212); 
    InvPanel.setLocation(0, 450); 
    StatsPanel.setMaximumSize(new Dimension (350, 250)); 
    MPanel.add(InvPanel); 

    JPanel DisplayPanel = new JPanel(); 
    DisplayPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
    DisplayPanel.setSize(1135, 450); 
    DisplayPanel.setLocation(350, 0); 
    MPanel.add(DisplayPanel); 

    JPanel ControlPanel = new JPanel(); 
    ControlPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
    ControlPanel.setSize(1135, 212); 
    ControlPanel.setLocation(350, 1135); 
    MPanel.add(ControlPanel); 

    MainWindow.setVisible(true); 

    } 

} 

Что должен делать: Разделить экран на четыре части с помощью JPanels

Что делает: Показывает три из панелей , Stats, Inv и Display, но не Control.

ПРИМЕЧАНИЕ! Я сказал это раньше, поэтому позвольте мне сказать это сейчас. У меня нет планов и НЕ ХОЧУ использовать диспетчер компоновки. Размеры этого должны быть очень конкретными, и я не хочу использовать трюки, чтобы просто использовать диспетчер компоновки. Помните об этом при ответе. Это нормально, если вы упомянули об этом, но, пожалуйста, не говорите прямо: «Используйте менеджер макетов». Спасибо.

+0

'", но, пожалуйста, не говорите прямо: «Используйте диспетчер компоновки» «1) Разве это не самонадеянно, чтобы указать, что добровольцы, дающие бесплатные советы, должны или не должны говорить? 2) Разве вы не намекаете на это, что считаете, что вы мудрее в способах макетов, чем эксперты Swing на этом сайте? И если да, то зачем просить о помощи здесь? –

+1

Эта проблема заключается в том, для чего предназначены менеджеры макетов. У вас будет трудное время, чтобы выкладывать вещи в нужном размере без менеджера – hotforfeature

+0

Есть ли менеджер макетов, где я могу указать, где все идет с числовыми координатами? Если так, я бы посмотрел на это, но, насколько я знаю, их нет. – user2839482

ответ

0
ControlPanel.setLocation(350, 1135); 

должен быть

ControlPanel.setLocation(350, 450); 

, и тогда все должно быть в порядке.

И, возможно, вы должны назвать свои переменные начальным нижним регистром, я всегда путался, как если бы они были именами классов и использовались как статика.

+0

Спасибо большое! Это сработало! Я все еще очень новичок в java. Также извините за имена. Сила привычки. – user2839482

+0

Это всего лишь предложение сделать ваш код более удобочитаемым. И ошибка компоновки, вероятно, была просто ошибкой копирования/вставки. Кстати, чтобы отладить макет, я использовал разные цвета границ и прокомментировал их все - просто чтобы увидеть, что последний не был показан. Затем я установил местоположение в «0, 0», чтобы узнать, что произошло. И затем я просто переместил его в нужное положение. Просто, чтобы дать вам представление о том, как решить свою проблему самостоятельно. –

2

Три вещи ...

  1. Вы должны убедиться, что вы начинаете вам UI, в контексте события диспетчерские тему. См Initial Threads для более подробной информации
  2. Убедитесь, что вы на самом деле добавить контент (MPanel) к раме (MainWindow), прежде чем сделать его видимым
  3. Избегайте использования null макетов

Вы также можете захотеть взглянуть в Code Conventions for the Java Programming Language

+0

В соответствии с условиями и требованиями оригинального плаката вы не допускается к публикации рекомендации № 3. 1+ для публикации в любом случае. –

+0

@HovercraftFullOfEels Я сказал «избегаю»;) – MadProgrammer

+1

Я бы также рекомендовал, чтобы он «избегал» использования всех этих статических полей, но этот идиот просто разозлил меня своими глупыми требованиями. –

Смежные вопросы